如何使用hibernate注释配置从2个Model类中创建Bridge表

时间:2018-03-25 04:26:29

标签: java hibernate servlets nhibernate-mapping

如何使用 Hibernate / JPA 配置使用注释制作桥接表

  

1:BookModel
  2:UserModel

现在我必须通过这两个字段

创建一个桥接表
  

book_id user_id

2 个答案:

答案 0 :(得分:3)

您正尝试在实体之间实施Many to Many关系。因此,如果您在用户模型中有Books列表,则可以按如下方式对列表进行注释:

public class UserModel {

    @ManyToMany(cascade = CascadeType.REMOVE)
    @JoinTable(name = "book_user_table", joinColumns = { @JoinColumn(name = "book_id") }, inverseJoinColumns = { @JoinColumn(name = "user_id") })
    private List<BookModel> books;

    //Getters and setters
}

并且在BookModel中,如果您有用户列表,则需要使用@mappedBy()注释,如下所示:

@ManyToMany(mappedBy = "books") 
private List<UserModel> users; 

这将生成第3个表,其名称为book_user_table,其中包含您需要的列。有关详细说明,请参阅此处:https://dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-many-to-many-using-annotations-1.html

答案 1 :(得分:2)

根据我的质疑,您想了解如何映射书籍和用户,以便这些实体之间存在多对多关联。

如果是这样,您需要在两个关联上指定@ManyToMany,并使其中一个为反向,另一个以@JoinTable结尾。这里有example mapping。下面的代码段。

@ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name = "Employee_Project", 
        joinColumns = { @JoinColumn(name = "employee_id") }, 
        inverseJoinColumns = { @JoinColumn(name = "project_id") }
    )
Set<Project> projects = new HashSet<>();

反之,

 @ManyToMany(mappedBy = "projects")
    private Set<Employee> employees;