У меня есть два класса сущностей: User и MyCharacter. Пользователь имеет список MyCharacters, и каждый MyCharacter ссылается на пользователя (владельца). То, что я хотел бы сделать, заключается в том, что я использую ту же таблицу соединений для обоих отношений, что означает, что отношение владельца, найденное в MyCharacter, автоматически будет использовать ту же таблицу соединений, что и от User = > MyCharacter. Это означает, что метод getOwner() в MyCharacter должен работать без меня, чтобы явным образом в какой-то момент вызывал setOwner (пользователь).Двустороннее отношение в JPA
Чтобы удалить это немного больше, вот мой блок тест, который в настоящее время выходит из строя (последний утверждают, терпит неудачу)
@Test
public void testTwoWayRelation() {
User user = new User();
MyCharacter character = new MyCharacter();
List<MyCharacter> chars = new ArrayList<MyCharacter>();
chars.add(character);
user.setCharacters(chars);
facade.store(user);
assertNotNull(character.getId());
character = facade.find(MyCharacter.class, character.getId());
assertNotNull(character.getOwner());
}
Мои классы сущностей перечислены ниже.
@Entity
@Table(name = "myuser")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@OneToMany(cascade = { CascadeType.PERSIST })
protected List<MyCharacter> characters;
public User() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<MyCharacter> getCharacters() {
return characters;
}
public void setCharacters(List<MyCharacter> characters) {
this.characters = characters;
}
}
@Entity
public class MyCharacter{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@ManyToOne
@JoinTable(name = "myuser_mycharacter", joinColumns = @JoinColumn(name = "characters_id"), inverseJoinColumns = { @JoinColumn(name = "user_id") })
protected User owner;
public MyCharacter() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getOwner() {
return owner;
}
public void setOwner(User owner) {
this.owner = owner;
}
}