当前位置: 首页 > 面试题库 >

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

穆德海
2023-03-14
问题内容

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

谢谢…

PS:我知道这不是理想的选择,但是我坚持使用模式,因此必须对其进行处理。


问题答案:

使用多对一公式可以做到这一点。从第5.1.22节开始。列和公式元素(此先前答复中也提到了解决方案):

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;


 类似资料:
  • 什么是SQL和什么是不同的类型?

  • 如何在JPA中使用相同的表执行左外部联接?当我试着这样做的时候: 我得到错误:“意外标记:在第1行附近,第122列[从com.homersoft.wh.db.entity.radius.radacct e1中选择e1在e1.username=e2.username和e1.radacctID ?1]”

  • 问题内容: 让我有实体和实体。实体与有关系。 我想下一步: 如果我删除A,那么也必须删除B。 如果我删除B,那么A也不会删除。 我必须在哪个实体中设置 我必须在哪一边 ? 问题答案: 从A到B的级联应该放在类引用的字段上,从B到A的级联应该放在类引用的字段上。 应该在课堂上,因为您希望每个动作都可以级联。 应该在课堂上,因为您只希望级联某些操作

  • 使用EnumClass: 筛选器位于父实体上: 过滤器是这样设置的: 和其他几个。 这里的任何帮助或提示都将不胜感激。谢了!

  • 我很难启动服务器,因为它抱怨在查询中找不到继承的属性。 我的问题是,既然我试图将它移动到继承模型(联接),我如何在带注释的查询中引用继承的属性? (注意,该属性是私有可见性,在BaseContent中使用public getter/setter) 谢谢。

  • 问题内容: 假设我有一个域类: 其中Animal是具有不同实现(Cat,Dog)的接口。假设我希望能够保存Zoo对象: 我想发送一个json-类似: 我如何告诉Spring MVC在type ==’Cat’时将动物映射到Cat类型,在type ==’Dog’时将其映射到Dog类? 问题答案: 您应该使用Jackson注释并实现多态json。注释在基类上。