java 带@Where子句的Hibernate @OneToOneMap

xfyts7mz  于 2023-06-28  发布在  Java
关注(0)|答案(3)|浏览(138)

会有用吗-

@OneToOne()
@JoinColumn(name = "id", referencedColumnName = "type_id")
@Where(clause = "type_name = OBJECTIVE")
public NoteEntity getObjectiveNote() {
  return objectiveNote;
}

这就是我要做的-从表note中获取记录,其type_id是当前对象的idtype_nameOBJECTIVE
我不能让上面的Map工作。我做错了什么?

e5nqia27

e5nqia271#

这是不起作用的,对不起:(你需要一对多地完成它,并接受一个只有一个元素的集合。
如果你真的希望它以这种方式工作,你可以欺骗hibernate,把外键ID和type_name都存储在一个连接表中,并告诉它这两列都构成了外键。

2jcobegt

2jcobegt2#

实际上,您可以通过指定@OneToOne而不指定任何@Where,但将@Where放在引用的实体类上来实现这一点。我在Hibernate 4.3.11上测试了这个。
如果您不关心任何与@Where不匹配的实体对象,则可以使用此方法。
如果你关心其他实体,你可以创建一个子类实体,把@Where放在上面,然后加入这个子类。但我没有测试过这个场景。

qltillow

qltillow3#

您可以尝试使用JoinColumnsOrFormulas注解。

@OneToOne()
@JoinColumnsOrFormulas({
    @JoinColumnOrFormula(column =
        @JoinColumn(name = "id", referencedColumnName = "type_id")),
    @JoinColumnOrFormula(formula =
        @JoinFormula(value = "OBJECTIVE", referencedColumnName = "type_name"))
})
public NoteEntity getObjectiveNote() {
  return objectiveNote;
}

即使对type_name = OBJECTIVE进行了额外的过滤,也应该会产生连接条件。

相关问题