繁体   English   中英

Spring JPA / Hibernate:如何在非主列上映射多态关系

[英]Spring JPA/ Hibernate : How to map polymorphic relation on non primary columns

class B{
@Any(metaColumn = @Column(name = "ITEM_TYPE"))
@AnyMetaDef(idType = "long", metaType = "string",
        metaValues = {
                @MetaValue(targetEntity = A.class, value = "A")
        })
@Cascade( { org.hibernate.annotations.CascadeType.ALL})
@JoinColumn(name = "ITEM_ID")
private A a;
...
...
}

我正在尝试联接表A和表B where B.item_type ='A'常量,B.item_id= A.id

它把我扔了

Caused by: org.hibernate.MappingException: Foreign key (FKi1uuph2wrvxtx66s7n7i1s09a:B [item_type,item_id])) must have same number of columns as the referenced primary key (A [id])

关于如何使用spring jpa和hibernate映射此内容有任何帮助吗?

您的问题尚不清楚,但下面可能会有所帮助

连接表A和表B,其中B.item_type ='A'是常量,而B.item_id =A.id。

1)B.item_type ='A':创建一个枚举并在查询时将其传递2)B.item_id = A.id:

让我们说这是一对多的关系。

Class B{

 @OneToMany
 @Cascade(org.hibernate.annotations.CascadeType.DETACH)
 @JoinColumns(@JoinColumn(name = "id", referencedColumnName = "item_id", insertable = false, updatable = false))
List<A> retunedList;

}

如果将是一对一的,请将Annotaion更改为@onetoOne,并使其返回类型A而不是list。

我能够通过另一种方法来解决此问题,在该方法中,我将关联的实体设置为@Transient,然后通过添加EntityListener类在父实体的@PostPersist调用中保存了该瞬时实体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM