簡體   English   中英

JPA到Hibernate的映射

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM