我有一个实体如下。我很好奇是否可以创建关系,正如我将用示例描述的那样:
- 我正在创建 2 Person实体Michael和Julia。
- 我正在将 Julia 添加到 Michael 的朋友集中。
之后,我将 Michael 作为 JSON 响应检索,并且 Julia 在响应中可用。但是当我检索 Julia 时,她的朋友集是空的。我想通过只保存友谊的一侧来创建双向友谊关系。我想在不做任何其他操作的情况下让迈克尔加入 Julia 的朋友圈。我认为它必须由 Hibernate 管理。有可能吗?我应该怎么做?
@ToString(exclude = "friends") // EDIT: these 2 exclusion necessary @EqualsAndHashCode(exclude = "friends") public class Person{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; @Column(name = "name",unique = true) private String name; @JsonIgnoreProperties("friends") // EDIT: will prevent the infinite recursion @ManyToMany(cascade = CascadeType.ALL) @JoinTable(name = "FRIENDSHIP", joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "friend_id", referencedColumnName = "id")) private Set<Person> friends;
这是我创建友谊的服务层代码:
@Override
public Person addFriend(String personName, String friendName)
throws FriendshipExistsException, PersonNotFoundException {
Person person = retrieveWithName(personName);
Person friend = retrieveWithName(friendName);
if(!person.getFriends().contains(friend)){
person.getFriends().add(friend);
return repository.save(person);
}
else{
throw new FriendshipExistsException(personName, friendName);
}
}
相关问题: 同一实体类型的双向多对多 N+1 查询
更新了源代码,此版本运行正常。