2013-10-14 181 views
0

我已經對我的模型做了必要的更改概述here。但是,我不知道要在我的連接表實體上放什麼。休眠多對多映射,加入PK和額外的列表

請注意,我的連接表有一個代理鍵和兩個額外的列(date和varchar)。

到目前爲止,我已經得到了什麼是:

User.java

@Entity 
@Table (name = "tbl_bo_gui_user") 
@DynamicInsert 
@DynamicUpdate 
public class User implements Serializable { 
    private String id; 
    private String ntName; 
    private String email; 
    private Set<GroupUser> groupUsers = new HashSet<GroupUser>(0); 

    // Constructors and some getters setters omitted 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.user", cascade=CascadeType.ALL) 
    public Set<GroupUser> getGroupUsers() { 
     return groupUsers; 
    } 

    public void setGroupUsers(Set<GroupUser> groupUsers) { 
     this.groupUsers = groupUsers; 
    } 
} 

Group.java

@Entity 
@Table (name = "tbl_bo_gui_group") 
@DynamicInsert 
@DynamicUpdate 
public class Group implements Serializable { 
    private String id; 
    private String groupName; 
    private String groupDesc; 
    private Set<GroupUser> groupUsers = new HashSet<GroupUser>(0); 

    // Constructors and some getters setters omitted 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.group", cascade=CascadeType.ALL) 
    public Set<GroupUser> getGroupUsers() { 
     return groupUsers; 
    } 

    public void setGroupUsers(Set<GroupUser> groupUsers) { 
     this.groupUsers = groupUsers; 
    } 
} 

的問題是,我不知道該穿什麼我的連接表實體。這裏是。

GroupUser.java

@Entity 
@Table (name = "tbl_bo_gui_group_user") 
@DynamicInsert 
@DynamicUpdate 
@AssociationOverrides({ 
    @AssociationOverride(name = "pk.user", 
      joinColumns = @JoinColumn(name = "id")), 
    @AssociationOverride(name = "pk.group", 
      joinColumns = @JoinColumn(name = "id")) }) 
public class GroupUser implements Serializable { 
    private String id; 
    private User userId; 
    private Group groupId; 
    private Date dateCreated; 
    private String createdBy; 

    // constructors and getters and setters for each property 

    // What now? ? No idea 
} 

回答

1

用戶組將是Many-To-Many關係。現在,你正在把它分解成兩個關係One-To-Many。因此,你的映射實體簡單的需求來完成Many-To-Many關係,通過使用Many-To-One

public class GroupUser implements Serializable { 
    private String id; 

    @ManyToOne 
    private User userId; 

    @ManyToOne 
    private Group groupId; 
    private Date dateCreated; 
    private String createdBy; 
} 

參見下面的例子:Mapping many-to-many association table with extra column(s)(在38個upvotes答案)

+0

我怎麼會寫的方法保存的數據連接表模型中的用戶和組?在你提供的鏈接上有'userService.setUser(user);',但它沒有顯示我正在尋找的連接表實體的完整想法。順便說一句,我是一個hibernate新手。 – makalshrek

+0

@SciasTwentyThree如果你的實體*設置正確*你不需要關心。即:一個用戶,5個映射,5個組和每個組有10個額外的屬性:調用'userService.save(user)'和hibernate將持續所有61個實體(1個用戶+5映射+5組+10個屬性/ 50)),因爲它們是「連接」的。 – dognose