有没有办法告诉Hibernate在使用to_char将列连接到另一个表或将NUMBER转换为VARCHAR时将其包装?我遇到的情况是,我的一个表包含一个类型为VARCHAR的通用键列,该列存储另一个表的ID(即Number)。当Hibernate执行它生成的SQL时,我收到一个SQL异常,该SQL使用’=’比较两列。
谢谢…
PS:我知道这不是理想的选择,但是我坚持使用模式,因此必须对其进行处理。
使用多对一公式可以做到这一点。从第5.1.22节开始。列和公式元素(此先前答复中也提到了解决方案):
column和formula属性可以甚至是相同的属性或关联映射中被合并来表达,例如,奇异的连接条件。 <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>
column和formula属性可以甚至是相同的属性或关联映射中被合并来表达,例如,奇异的连接条件。
column
formula
<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:
@JoinColumnsOrFormula
@ManyToOne @JoinColumnsOrFormulas( { @JoinColumnOrFormula(formula=@JoinFormula(value="SUBSTR(product_idnf, 1, 3)", referencedColumnName="product_idnf")) }) @Fetch(FetchMode.JOIN) private Product productFamily;