Отношения Ebean/Play Framework не обновляются

2 [2014-08-31 16:29:00]

Я использую платформу play 2.3.3 с Ebean и Java. У меня есть следующие модели (я реализую геттеры и сеттеры):

@Entity
public class Follow {

  @ManyToOne
  private User follower;

  @ManyToOne
  private User followed;
}

а также

@Entity
public class User {

  @Id
  @GeneratedValue
  private long id;

  @OneToMany(mappedBy = "followed")
  private Set<Follow> followers;

  @OneToMany(mappedBy = "follower")
  private Set<Follow> following;

  public void addFollowing(Follow f) { following.add(f); }
  public void addFollower(Follow f) { followers.add(f); }
}

И чтобы проверить эти отношения, у меня есть:

@Test
public void userFollowTest() {
    User a = new User();
    User b = new User();
    Follow follow = new Follow(a, b); // a follows b
    a.addFollowing(follow);
    b.addFollower(follow);

    Ebean.beginTransaction();
    Ebean.save(a);
    Ebean.save(b);
    Ebean.save(follow);
    Ebean.commitTransaction();

    Assert.assertEquals("Number of users", 2, User.find.all().size());
    Assert.assertEquals("Number of following of user A", 1, User.find.byId(1L).getFollowing().size());
    Assert.assertEquals("Number of followers of user B", 1, User.find.byId(2L).getFollowers().size());
    Assert.assertEquals("Number of follows", 1, Follow.find.all().size());
}

Но это работает:

Assert.assertEquals("Number of users", 2, User.find.all().size());
Assert.assertEquals("Number of following of user A", 1, a.getFollowing().size());
Assert.assertEquals("Number of followers of user B", 1, b.getFollowers().size());
Assert.assertEquals("Number of follows", 1, Follow.find.all().size());
Assert.assertTrue("User a is follower and User b is followed", follow.getFollower().getId() == 1 &&
            follow.getFollowed().getId() == 2);

Проблема заключается в том, что, несмотря на то, что пользователи и последующие создаются в базе данных, второе и третье утверждения терпят неудачу (это значит, что у пользователя нет никаких следов). Я попытался сначала создать пользователей, а затем следовать, и он все еще не работает.

java ebean playframework


1 ответ


1 [2014-09-01 01:13:00]

Решаемые. Похоже, что решение заключается в создании поля идентификатора в сущности Follow. Я попытался поместить оба поля в качестве идентификаторов, но Ebean не принимает его, поэтому в итоге я использовал идентификатор типа long.