[英]JPA to Hibernate mapping
我有一個現有的應用程序EJB,OpenJPA,其中下面的映射可以正常工作,當我遷移到springboot休眠時,它給出了錯誤,因為broken id
嘗試了broken id
示例,但找不到解決方案,任何幫助都是可取的。
public class Table1{
@EmbeddedId
private Table1PK id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "t1k1", referencedColumnName = "t2k1")
private Table2 table2;
}
表1的PK如下:
public class Table1PK implements Serializable{
private String t1k1;
private String t1k2;
.
.
//other keys
}
子表如下:
public class Table2 {
@EmbeddedId
private Table2PK id;
//other fields
}
表2的PK如下:
public class Table2PK implements Serializable{
private String t2k1;
private String t2k2;
}
以下是上面實現的堆棧跟蹤:
org.hibernate.MappingException: broken column mapping for: table2.id of: com.org.model.Table2
at org.hibernate.persister.entity.AbstractPropertyMapping.initPropertyPaths(AbstractPropertyMapping.java:304) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.persister.entity.AbstractPropertyMapping.initIdentifierPropertyPaths(AbstractPropertyMapping.java:392) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.persister.entity.AbstractPropertyMapping.initPropertyPaths(AbstractPropertyMapping.java:358) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.initOrdinaryPropertyPaths(AbstractEntityPersister.java:2428) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.initPropertyPaths(AbstractEntityPersister.java:2475) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.postConstruct(AbstractEntityPersister.java:4083) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:446) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at sun.reflect.GeneratedConstructorAccessor85.newInstance(Unknown Source) ~[na:na]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_211]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_211]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:154) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) ~[spring-orm-5.1.8.RELEASE.jar:5.1.8.RELEASE]
====================
表格1
id|name|age|emailId|
其中組合鍵是ID和年齡
表2:
id|address1|address2|pincode|
其中組合鍵是id和pincode,並且對於表1中的每個記錄來說,這絕對是一個一對一的映射,因此在表2中將記錄或不記錄。由於不是每個人都必須有地址,但如果有地址,則兩個人中的id都相同表。
並且id不是Autoincrement或int,它是根據要求定制的。
Table2具有組合的ID,因此table2屬性需要雙JoinColumn批注,我將屬性insertable和Table1PK id
更改為false,因為此列已映射到Table1PK id
;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "t1k1", referencedColumnName = "t2k1", , insertable = false, updatable = false)
@JoinColumn(name = "t1k2", referencedColumnName = "t2k2", , insertable = false, updatable = false)
private Table2 table2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.