针对多个一对多关系正确执行hibernate实现

时间:2017-01-09 19:07:43

标签: java hibernate one-to-many many-to-one

我目前正在使用具有多个一对多关系的表格,并且我尝试使用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;
    }

}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

由于用户与产品和产品处于多对一关系   Group,我目前的Users.java实现是否正确   包含两个ManyToOne注释的实现方式?

是的,这是正确的方法(如果您只想要基本的ManyToOne映射)并且您可以在一个类中拥有多个ManyToOne映射。
如果您需要定义任何CascadingFetchType或其他类(targetEntity),那么您需要添加这些类。

  

此外,最好在上方编写ManyToOne注释   获取方法(在这种情况下,getProduct()以上和getGroup())或   把它们写在类变量的正上方?

它主要取决于您是否要在保存Object之前进行一些处理。
如果对象的值为空等,则向DB发送默认值

我个人更喜欢在类变量上使用hibernate注释。 Here是一个可以清楚解释这一点的链接。

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

Spring documentation中提供了一些细节,这些细节在某种程度上解决了同样的问题,但对于春天来说。

  

方法和字段级注入

     

表示依赖注入的注释(例如   @PersistenceUnit和@PersistenceContext)可以应用于字段或   类中的方法,因此表达式为“方法/字段级别”   注入“。字段级注释简洁易用   方法级别允许处理注入的依赖项。同时   成员可见性(公共,受保护,私有)没有的情况   物质

相关问题