我目前正在使用具有多个一对多关系的表格,并且我尝试使用Hibernate实现所有这些关键字。
例如,我有三张桌子:
产品,用户,群组
群组与用户的一对多关系
产品与用户的关系也是一对多的
由于Users与Product和Group处于多对一关系,因此我将当前的Users.java实现通过包含两个ManyToOne注释来实现正确的实现方式吗?
另外,在get方法(在本例中,在getProduct()和getGroup()之上)编写ManyToOne注释或者在类变量上方编写它们会更好吗?
@Entity
@Table(name = "users")
public class Users {
@Id
@Column(name = "id")
@GeneratedValue
private int id;
@ManyToOne
@JoinColumn(name = "product_id")
private Product product;
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
@Column(name = "user_name")
private String userName;
public Users(){}
public Users(Product product, Group group, String userName) {
this.product = product;
this.group = group;
this.userName = userName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public product getProduct() {
return product;
}
public Group getGroup(){
return group;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
感谢您的帮助!
答案 0 :(得分:1)
由于用户与产品和产品处于多对一关系 Group,我目前的Users.java实现是否正确 包含两个ManyToOne注释的实现方式?
是的,这是正确的方法(如果您只想要基本的ManyToOne映射)并且您可以在一个类中拥有多个ManyToOne映射。
如果您需要定义任何Cascading
或FetchType
或其他类(targetEntity
),那么您需要添加这些类。
此外,最好在上方编写ManyToOne注释 获取方法(在这种情况下,getProduct()以上和getGroup())或 把它们写在类变量的正上方?
它主要取决于您是否要在保存Object之前进行一些处理。
如果对象的值为空等,则向DB发送默认值
我个人更喜欢在类变量上使用hibernate注释。 Here是一个可以清楚解释这一点的链接。
无论采用哪种方法,hibernate都会查找定义@Id
注释的位置(在方法或变量级别),以决定应为其他字段选择哪种扫描。
在Spring documentation中提供了一些细节,这些细节在某种程度上解决了同样的问题,但对于春天来说。
方法和字段级注入
表示依赖注入的注释(例如 @PersistenceUnit和@PersistenceContext)可以应用于字段或 类中的方法,因此表达式为“方法/字段级别” 注入“。字段级注释简洁易用 方法级别允许处理注入的依赖项。同时 成员可见性(公共,受保护,私有)没有的情况 物质