使用附加列休眠多对多映射?

Rah*_*wal 1 hibernate

我需要在 manytomany 生成的表中有额外的列

有 2 个实体相互关联,多对多(用户多对多组)

@Entity
public class User {
    //other fields
    private Set<Group> groups = new HashSet<Group>(0);
}

@Entity
public class Group {
    //other fields
    private Set<User> users = new HashSet<User>(0);
}
Run Code Online (Sandbox Code Playgroud)

所以在这里它在数据库中生成 3 个表作为

表 1 - 用户

表 2 - 组

表 3 - 用户组

现在我需要 UserGroup 表中的其他字段,那么如何指定该字段以及在哪个实体中指定?

附加字段将是

私有布尔值 isThisUserIsGroupManager;

这样,我可以让该组的用户也是组管理员。

Mik*_*unu 5

关系没有要设置的持久属性,只有实体才有。这就是为什么你需要第三个实体之间的原因。它将有两个@Id属性,因此@IdClass是需要的,因为身份来自GroupUser

@Entity
public class User {
    @Id int id;    
    @OneToMany(mappedBy = "user")
    private Set<GroupMemberShip> groupMemberShips;
    ...
}

@Entity
public class Group {
    @Id int id;
    @OneToMany(mappedBy = "group")
    private Set<GroupMemberShip> groupMemberShips;
    ...
}


@Entity
@IdClass(GroupMemberShipId.class)
public class GroupMemberShip {
    @Id @ManyToOne User user;

    @Id @ManyToOne Group group;

    private boolean isThisUserIsGroupManager;
    ...
}

public class GroupMemberShipId implements Serializable {
    int user;
    int group;
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 实现可序列化 (5认同)