有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案