如何在我的连接中使用OR条件进行休眠?

时间:2014-06-20 16:47:49

标签: hibernate

如何在Hibernate中表示以下SQL?

SELECT * FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.COLUMN1 = TABLE2.COLUMN1 OR TABLE1.COLUMN1 = TABLE2.COLUMN2 OR TABLE1.COLUMN1 = TABLE2.COLUMN3

TABLE1的值可以存在于TABLE2的COLUMN1,COLUMN2或COLUMN3中。我之所以需要这种关系是因为我将TABLE2作为对象嵌入了TABLE1&#39的类中。

如,

@ManyToOne
@JoinColumns({
    @JoinColumn(name="COLUMN1", referencedColumnName="COLUMN1"),
            @JoinColumn(name="COLUMN1", referencedColumnName="COLUMN2")
})
private TABLE2 object;

上述代码不起作用并引发以下错误:

引起:org.hibernate.MappingException:属性映射列数错误:

1 个答案:

答案 0 :(得分:0)

所以我选择的解决方案是通过连接3个不同的列将TABLE2添加为3个单独的对象。我还设置了optional = true以允许左外连接。我对这种方法并不感到高兴,因为看起来应该采用不同的方式。

@ManyToOne(optional = true)
@JoinColumn(name="COLUMN1", referencedColumnName="COLUMN1")
private TABLE2 object1;

@ManyToOne(optional = true)
@JoinColumn(name="COLUMN1", referencedColumnName="COLUMN2")
private TABLE2 object2;

@ManyToOne(optional = true)
@JoinColumn(name="COLUMN1", referencedColumnName="COLUMN3")
private TABLE2 object3;