春天JPA /休眠:如何映射非主列多态性关系(Spring JPA/ Hibernate : How

2019-10-29 04:19发布

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;
...
...
}

我试图加入一个表和表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])

如何将我这个映射使用JPA春季和休眠的任何帮助吗?

Answer 1:

你的问题不明确,但低于可帮助

加入表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,并返回类型的,而不是名单。



Answer 2:

我能够通过另一种方法,其中我提出的相关联实体@Transient来解决这个然后我保存的,通过添加一个EntityListener类从父实体@PostPersist呼叫临时实体。



文章来源: Spring JPA/ Hibernate : How to map polymorphic relation on non primary columns