【问题标题】:How to use an OR condition in my join for hibernate?如何在我的加入中使用 OR 条件进行休眠?
【发布时间】:2014-06-20 16:47:49
【问题描述】:

如何在 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 的类中。

例如,

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

上面的代码不起作用并抛出以下错误:

原因:org.hibernate.MappingException:属性映射的列数错误:

【问题讨论】:

  • 那么您需要一种方法将其转换为 HQL 吗?还是变成实体对象?代表到底是什么意思?
  • 实体对象。我的意思是嵌入 TABLE2 在休眠中的样子。我已经修改了我的问题以包含更多关于类加入的描述。

标签: hibernate


【解决方案1】:

所以我选择的解决方案是通过加入 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多