Hibernate注释哪里只适用于1到多个关系?

时间:2016-05-16 09:52:44

标签: java sql spring hibernate where

美好的一天,

我有一个实体文件调用Agroup.java,我将它链接到另一个表调用Bservice.java,这是一对多的关系。所以我编写如下代码:

@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "Agroup")
    @Where(clause = "deleted = 0")
    public Set< Bservice> getBServices() {
        return BServices;
    }

在hibernate查询中,我发现它会添加deleted = 0条件。

left outer join Bservice b on a.groupId = b.groupId AND ( b.deleted = 0)"

这很好。

但是,我有另一种方法,即多对一关系,这是Bservice.java链接到Cservice.java,我把它编码如下:

@ManyToOne()
    @JoinColumn(name = "serviceId", nullable = false)
    @Where(clause = "deleted = 0")
    public Cservice getCService() {
        return CService;
    }

这只加入2表,但没有添加where条件。

left outer join Cservice c on b.serviceId = c.serviceId

Hibernate注释是否仅适用于1对多关系?

请告知。

1 个答案:

答案 0 :(得分:0)

这一切都取决于你的Hibernate版本。 对您的问题的简短回答是:否。@Where注释可用于OneToOneManyToOne关系。

根据您的Hibernate版本,将使用左外连接子句之外的“Where”子句生成SQL。像这样:

  

...在b.serviceId = c.serviceId WHERE上左外连接Cservice c   b.deleted = 0

而不是:

  

左外连接Bservice b on a.groupId = b.groupId AND(b.deleted =   0)

看一下Hibernate团队的这个链接:https://hibernate.atlassian.net/browse/HHH-9084

从官方文档:https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-association

  

可以设置

     

- &GT; where子句,使用@Where(应用于目标实体)或@WhereJoinTable(应用于关联表)