2017-01-09 44 views
0

我目前正在处理具有多个一对多关系的表,我试图用Hibernate来实现所有这些关系。更正多个一对多关系的hibernate实现

例如,三个表我已经是:

产品,用户,

集团

集团与用户的一个一对多的关系

产品也处于一个对与用户的多种关系

由于用户与产品和组之间存在多对一的关系,因此通过包含两个ManyToOne批注,我当前的Users.java实现是否是正确的实现方式?

此外,在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; 
    } 

} 

谢谢你的帮忙!

回答

1

由于用户与这两个产品和 集团多到一的关系,就我目前的执行Users.java的是为包括两个多对一注释执行正确 方法是什么?

是的,这是正确的方法(如果你只想要基本的ManyToOne映射),并且你可以在一个类中有多个ManyToOne映射。
如果您需要任何CascadingFetchType或不同的类别(targetEntity)进行定义,则需要添加这些类别。

而且,是它更好地写多对一注解右上方的 get方法(在这种情况下,上述getProduct()及以上getGroup())或 给他们写对上述类变量?

它主要取决于在保存对象之前是否想做一些处理。
就像发送一个默认值给数据库,以防对象的值为空等。

我个人比较喜欢在类变量上使用hibernate注释。 Here是一个链接,它清楚地解释了这一点。

无论采取哪种方法,hibernate都会查找@Id注释的定义位置(在方法或变量级别),以决定为其他字段选择哪个扫描。

粘贴Spring documentation中提供的一些细节,这有点解决了春季的同样的问题。

方法和字段级别注塑

注解指示依赖注射(如 @PersistenceUnit和@PersistenceContext)可以在现场或 方法施加一类的内部,因此,表述“方法/场水平 注射“。字段级注释简洁且易于使用,而方法级允许处理注入的依赖项。在 的情况下,会员的知名度(公开,保护,私密)不是 的事。