JPA 或 Hibernate - 在不同类型的列上连接表

Posted

技术标签:

【中文标题】JPA 或 Hibernate - 在不同类型的列上连接表【英文标题】:JPA or Hibernate - Joining tables on columns of different types 【发布时间】:2010-06-22 20:42:37 【问题描述】:

有没有办法告诉 Hibernate 在使用 to_char 连接到另一个表或将 NUMBER 转换为 VARCHAR 时将列包装在 to_char 中?我有一个表,其中包含一个 VARCHAR 类型的通用键列,它存储另一个表的 ID,它是一个数字。当 Hibernate 执行它生成的使用 '=' 比较两列的 SQL 时,我遇到了 SQL 异常。

谢谢...

附:我知道这并不理想,但我被模式卡住了,所以我必须处理它。

【问题讨论】:

【参考方案1】:

这应该可以在多对一中使用公式。来自5.1.22. Column and formula elements部分(这个previous answer中也提到了解决方案):

columnformula 属性可以 甚至可以合并在同一个 属性或关联映射到 表达,例如,异国情调的加入 条件。

<many-to-one name="homeAddress" class="Address"
        insert="false" update="false">
    <column name="person_id" not-null="true" length="10"/>
    <formula>'MAILING'</formula>
</many-to-one>

带注释(如果您使用的是 Hibernate 3.5.0-Beta-2+,请参阅HHH-4382):

@ManyToOne
@Formula(value="( select v_pipe_offerprice.offerprice_fk from v_pipe_offerprice where v_pipe_offerprice.id = id )")
public OfferPrice getOfferPrice()  return offerPrice;  

或者查看@JoinColumnsOrFormula:

@ManyToOne
@JoinColumnsOrFormulas(
 @JoinColumnOrFormula(formula=@JoinFormula(value="SUBSTR(product_idnf, 1, 3)", referencedColumnName="product_idnf")) )
@Fetch(FetchMode.JOIN)
private Product productFamily;

【讨论】:

非常感谢.. @JoinColumnsOrFormula 注释工作得很好。先生,您是一位绅士和一位学者。 'MAILING'”是什么意思?

以上是关于JPA 或 Hibernate - 在不同类型的列上连接表的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate / JPA在合并后获取数据库中具有默认值的列的值

JPA/Hibernate 将简单字符串或任意对象映射到 mysql 日期类型?

如何在pojo中用jpa或hibernate映射json字段?

JPA/Hibernate 类型安全删除查询

hibernate使用

hibernate.jpa.criteria.BasicPathUsageException:无法加入基本类型的属性