2017-08-05 84 views
0

我在我的web应用程序中使用hibernate 4。我有Person,Department &角色。正如一个人的名字所能够拥有的不仅仅是角色,还有不止一个部门。但是每个角色都是针对特定部门的。我设计如下。如何在hibernate中映射用户,部门,角色?

Person.java

@Entity 
@Data 
public class Person implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column 
    private int id; 

    @Column 
    private String name; 

    @JoinTable(name = "person_department_role", 
      joinColumns = @JoinColumn(name = "person_id"), 
      inverseJoinColumns = @JoinColumn(name = "role_id")) 
    @MapKeyJoinColumn(name = "department_id") 
    @ElementCollection 
    private Map<Department, Role> roleByDepartment = new HashMap<>(); 
} 

Department.java

@Entity 
@Data 
public class Department implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column 
    private int id; 

    @Column 
    private String name; 

} 

Role.java

@Entity 
@Data 
public class Role implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column 
    private int id; 

    @Column 
    private String name; 

} 

甲根据上述设置,我不能向任何人添加多个部门。这个代码需要做什么改变,这样一个人可以拥有多个角色以及多个部门?任何建议。

回答

0

您需要正确指定@OneToMany@ManyToOne的关系。

另外,如果你想有其DepartmentsRoles反之亦然Person检索,你需要指定杰克逊@JsonManagedReference@jsonBackReference标注为好。

如果您仍遇到问题,请查看以下示例并再次在此处发帖。

一对多/多对一:http://fruzenshtein.com/bidirectional-many-to-one-association/

JsonManagedReference/JsonBackReference:http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion