java Spring | JPA |选择正确的级联类型注释
在Spring引导服务器后端中,我需要在两个实体(用户/匹配)之间创建双向关联。一个用户可以有多个匹配项,并且一个匹配项始终包含两个用户。问题是我没有找到关联属性的正确级联注释
问题是,当我在MatchService中调用likeUser方法时,用户的匹配列表没有更新。我创建了一个新的match对象,并在user setter match方法中将user的引用设置为match(将匹配添加到其匹配列表中),然后保存匹配。但是用户匹配列表的操作不会保存在数据库中
有人知道解决这个问题的正确方法吗
以下是我的代码的简短摘录:
@Entity(name = "User_")
public class User {
@Id
@GeneratedValue
private Long id;
private String username;
@JsonIgnore
private String password;
@OneToMany(targetEntity = Match.class, cascade = CascadeType.ALL)
private List<Match> matches;
public void addMatch(Match match) {
matches.add(match);
}
}
@Entity(name = "Match_")
public class Match {
@Id
@GeneratedValue
private Long id;
/**
* User 1 is always the user who likes the other person first
*/
@ManyToOne(targetEntity = User.class, cascade = CascadeType.REFRESH)
private User user1;
/**
* User 2 is the user who has to confirm the match
*/
@ManyToOne(targetEntity = User.class, cascade = CascadeType.REFRESH)
private User user2;
public void setUser1(User user1) {
this.user1 = user1;
user1.addMatch(this);
}
public void setUser2(User user2) {
this.user2 = user2;
user2.addMatch(this);
}
public void setUsers(User user1, User user2) {
this.setUser1(user1);
this.setUser2(user2);
}
}
@Service
public class MatchService {
public void addMatch(Match match) {
matchRepository.save(match);
}
/**
* Method that is called if one user likes another.
*
* @param likedUser - the user who has been liked by initialUser
* @return - the match object that has either been created or was already existing
*/
public Match likeUser(User likedUser) {
User initialUser = userService.getCurrentUser();
//check if likedUser has already like initialUser
for (Match match : likedUser.getMatches()) {
if (match.getUser2().equals(initialUser)) {
match.confirm();
return match; // its a match
}
}
Match unconfirmedMatch = new Match();
unconfirmedMatch.setUsers(initialUser, likedUser);
addMatch(unconfirmedMatch);
return unconfirmedMatch;
}
}
共 (0) 个答案