美好的一天,
我有一个实体文件调用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对多关系?
请告知。
答案 0 :(得分:0)
这一切都取决于你的Hibernate版本。
对您的问题的简短回答是:否。@Where
注释可用于OneToOne
和ManyToOne
关系。
根据您的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
可以设置
- &GT; where子句,使用@Where(应用于目标实体)或@WhereJoinTable(应用于关联表)