簡體   English   中英

JPA單向一對多連接表-實體映射不起作用

[英]JPA unidirectional one to many with join table - entity mapping not working

我試圖為使用以下表設計的數據庫創建一些JPA實體: PRINCIPALSCREDENTIALS與其他表具有以下關系:

@Entity
@Table(name = "CREDENTIALS")
public class Credentials {

    @Id   
    @Column(name = "CREDENTIAL_ID")
    private Integer credentialID;

    @Id   
    @Column(name = "CREDENTIAL_TYPE_ID")
    private String credentialTypeID;

    @OneToOne
    @JoinColumn(name = "CREDENTIAL_TYPE_ID", insertable = false, updatable = false)
    private CredentialTypes credentialTypes;  
}       
  • CREDENTIALSCREDENTIAL_TYPES具有oneToOne關系

     @Entity @Table(name = "CREDENTIAL_TYPES") public class CredentialTypes { @Id @Column(name = "CREDENTIAL_TYPE_ID") private String credentialTypeID; @Column(name = "DESCRIPTION") private String description; } 

@Entity
@Table(name = "PRINCIPALS")
public class Principals implements Serializable {

    @Id   
    @Column(name = "PRINCIPAL_TYPE_ID", nullable = false)
    private String principalTypeID;

    @Column(name = "PRINCIPAL_ID", nullable = false)
    private String principalID;

    @OneToOne
    @JoinColumn(name = "PRINCIPAL_TYPE_ID", insertable = false, updatable = false)
    private PrincipalTypes principalTypes;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "PRINCIPAL_CREDENTIAL",
        joinColumns = @JoinColumn(name = "CREDENTIAL_ID"),
        inverseJoinColumns = @JoinColumn(name = "PRINCIPAL_ID"))
    private List<Credentials> credentials;
  • PRINCIPALSPRINCIPAL_TYPES有一個一對一的關系

      @Entity @Table(name = "PRINCIPAL_TYPES") public class PrincipalTypes implements Serializable { @Id @Column(name = "PRINCIPAL_TYPE_ID", nullable = false) private String principalTypeID; @Column(name = "DESCRIPTION") private String description; 
  • 最后, PRINCIPALSCREDENTIALS具有oneToMany關系,並使用聯接PRINCIPLE_CREDENTIAL

     @Entity @Table(name = "PRINCIPAL_CREDENTIAL") public class PrincipalCredential implements Serializable { @Id @Column(name = "PRINCIPAL_TYPE_ID", nullable = false) private String principalTypeID; @Id @Column(name = "PRINCIPAL_ID", nullable = false) private String principalID; @Id @Column(name = "CREDENTIAL_ID") private Integer credentialID; @Id @Column(name = "CREDENTIAL_TYPE_ID") private String credentialTypeID; 

在啟動時(使用SpringBoot),我收到一個關於Principals和Credentials之間的oneToMany關系的錯誤,只是不知道如何解決它……嘗試了各種其他方法(無法更改DB設計)。

Caused by: org.hibernate.AnnotationException: A Foreign key refering entities.Principals from entities.Credentials has the wrong number of column. should be 2
        at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:502)
        at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1467)
        at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1233)
        at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:794)
        at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:729)
        at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70)
        at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697)
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:85  

我發現異常,因為沒有從憑證中引用原則。...

joinColumns / inverseJoinColumns中缺少PRINCIPLE_TYPE_ID和CREDENTIAL_TYPE_ID。 我認為您必須使用@JoinColumns批注

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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