Java Hibernate中的可选多对多关系

Java Hibernate中的可选多对多关系,java,hibernate,jakarta-ee,entity-relationship,Java,Hibernate,Jakarta Ee,Entity Relationship,我想创建如下的M:N关系 每个用户可以拥有0本或多本电子书 每本电子书必须属于一个或多个用户 我在Hibernate中的映射: User.java @实体 @表(name=“USERS”) 公共类用户{ //... @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) @JoinTable(name=“USER\u EBOOK”,joinColumns=@JoinColumn(name=“USER\u ID”,nullable

我想创建如下的M:N关系

  • 每个用户可以拥有0本或多本电子书

  • 每本电子书必须属于一个或多个用户

我在Hibernate中的映射:

User.java

@实体
@表(name=“USERS”)
公共类用户{
//...
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(name=“USER\u EBOOK”,joinColumns=@JoinColumn(name=“USER\u ID”,nullable=false),
inverseJoinColumns=@JoinColumn(name=“EBOOK\u ID”,nullable=false))
private List-listOfEbooks=new-ArrayList();
//...
}
Ebook.java

@实体
@表(name=“电子书”)
公共类电子书{
//...
@ManyToMany(mappedBy=“listOfEbooks”,fetch=FetchType.EAGER)
@NotFound(action=NotFoundAction.EXCEPTION)
private List listOfEbookUsers=new ArrayList();
//...
}

如何添加此附加约束,例如一个多个-零个多个?当我仅将电子书对象保存到数据库时,存在不属于任何人的电子书。

请参阅此问题和线程的答案:

另请参见本教程:


本教程提供了如何实现适当的多对多映射的非常好的示例。

您是否尝试使用额外的逻辑创建setter?我有默认生成的setter。。嗯,在添加之前,你到底是如何得到阻止的想法的,例如,没有所有者的电子书?换句话说,要制作一个或多个,hibernate根据我看到的创建零个或多个
@Entity
@Table(name = "USERS")
public class User {
//...
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "USER_EBOOK", joinColumns = @JoinColumn(name = "USER_ID", nullable = false),
           inverseJoinColumns = @JoinColumn(name = "EBOOK_ID", nullable = false))   
private List<Ebook> listOfEbooks = new ArrayList<Ebook>();
//...
}
@Entity
@Table(name="EBOOK")
public class  Ebook {
//...
@ManyToMany(mappedBy = "listOfEbooks", fetch = FetchType.EAGER)  
@NotFound(action = NotFoundAction.EXCEPTION)    
private List<User> listOfEbookUsers = new ArrayList<User>();
//...
}