2017-10-05 105 views
2

之间我尝试LbgOneToMany注释不能使一对多连接两个表

package bg.moi.domain.model; 

import javax.persistence.*; 
import java.util.Date; 
import java.util.Set; 

@Entity 
@Table(name = "l_bg" , catalog = "bds1")//, schema = "admbds", 
@IdClass(LBgEntityPK.class) 
public class LBgEntity { 
    @Id 
    @Column(name = "sid_o", nullable = false, precision = 0) 
    private int sidO; 
    public int getSidO() { 
     return sidO; 
    } 

    public void setSidO(int sidO) { 
     this.sidO = sidO; 
    } 

    @Id 
    @Column(name = "pnr_o", nullable = false) 
    private short pnrO; 
    public short getPnrO() { 
     return pnrO; 
    } 

    public void setPnrO(short pnrO) { 
     this.pnrO = pnrO; 
    } 

    @Basic 
    @Column(name = "egn", nullable = false, length = 10) 
    private String egn; 
    public String getEgn() { 
     return egn; 
    } 

    public void setEgn(String egn) { 
     this.egn = egn; 
    } 

    @Basic 
    @Column(name = "ime", nullable = false, length = 25) 
    private String ime; 
    public String getIme() { 
     return ime; 
    } 

    public void setIme(String ime) { 
     this.ime = ime; 
    } 

    @Basic 
    @Column(name = "prezime", nullable = false, length = 25) 
    private String prezime; 
    public String getPrezime() { 
     return prezime; 
    } 

    public void setPrezime(String prezime) { 
     this.prezime = prezime; 
    } 

    @Basic 
    @Column(name = "familno", nullable = false, length = 43) 
    private String familno; 
    public String getFamilno() { 
     return familno; 
    } 

    public void setFamilno(String familno) { 
     this.familno = familno; 
    } 

    @Basic 
    @Column(name = "dat_vav", nullable = false) 
    private Date datVav; 
    public Date getDatVav() { return datVav; } 
    public void setDatVav(Date datVav) { this.datVav = datVav; } 

    @Basic 
    @Column(name = "mrk_akt", nullable = false, length = 1) 
    private String mrkAkt; 
    public String getMrkAkt() { 
     return mrkAkt; 
    } 
    public void setMrkAkt(String mrkAkt) { 
     this.mrkAkt = mrkAkt; 
    } 

    @OneToMany(targetEntity = ILbgEntity.class,fetch = FetchType.LAZY) 
    @JoinColumns({@JoinColumn(name = "sidO",referencedColumnName = "sidO",insertable = false,updatable = false), 
      @JoinColumn(name = "pnrO" ,referencedColumnName = "pnrO",insertable = false,updatable = false)}) 
    //@JoinColumn(foreignKey = @ForeignKey(name = "r130_1013")) 
    private Set<ILbgEntity> iLbgEntity; 
    public void setiLbgEntity(Set<ILbgEntity> iLbgEntity) { this.iLbgEntity = iLbgEntity; } 
    public Set<ILbgEntity> getiLbgEntity(){ return iLbgEntity; } 


    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     LBgEntity lBgEntity = (LBgEntity) o; 

     if (sidO != lBgEntity.sidO) return false; 
     if (pnrO != lBgEntity.pnrO) return false; 
     if (egn != null ? !egn.equals(lBgEntity.egn) : lBgEntity.egn != null) return false; 
     if (ime != null ? !ime.equals(lBgEntity.ime) : lBgEntity.ime != null) return false; 
     if (prezime != null ? !prezime.equals(lBgEntity.prezime) : lBgEntity.prezime != null) return false; 
     if (familno != null ? !familno.equals(lBgEntity.familno) : lBgEntity.familno != null) return false; 
     if (datVav != null ? !datVav.equals(lBgEntity.datVav) : lBgEntity.datVav != null) return false; 
     if (mrkAkt != null ? !mrkAkt.equals(lBgEntity.mrkAkt) : lBgEntity.mrkAkt != null) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = sidO; 
     result = 31 * result + (int) pnrO; 
     result = 31 * result + (egn != null ? egn.hashCode() : 0); 
     result = 31 * result + (ime != null ? ime.hashCode() : 0); 
     result = 31 * result + (prezime != null ? prezime.hashCode() : 0); 
     result = 31 * result + (familno != null ? familno.hashCode() : 0); 
     result = 31 * result + (datVav != null ? datVav.hashCode() : 0); 
     result = 31 * result + (mrkAkt != null ? mrkAkt.hashCode() : 0); 
     return result; 
    } 

} 

package bg.moi.domain.models; 

import javax.persistence.Column; 
import javax.persistence.Id; 
import java.io.Serializable; 

public class LBgEntityPK implements Serializable { 
    private int sidO; 
    private short pnrO; 

    @Column(name = "sid_o", nullable = false, precision = 0) 
    @Id 
    public int getSidO() { 
     return sidO; 
    } 

    public void setSidO(int sidO) { 
     this.sidO = sidO; 
    } 

    @Column(name = "pnr_o", nullable = false) 
    @Id 
    public short getPnrO() { 
     return pnrO; 
    } 

    public void setPnrO(short pnrO) { 
     this.pnrO = pnrO; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     LBgEntityPK that = (LBgEntityPK) o; 

     if (sidO != that.sidO) return false; 
     if (pnrO != that.pnrO) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = sidO; 
     result = 31 * result + (int) pnrO; 
     return result; 
    } 
} 


    package bg.moi.domain.model; 

    import javax.persistence.*; 

    @Entity 
    @Table(name = "i_lbg", catalog = "bds1") //schema = "admbds", 
    @IdClass(ILbgEntityPK.class) 
    public class ILbgEntity { 

     @Id 
     @Column(name = "sid_o", nullable = false, precision = 0) 
     private int sidO; 
     public int getSidO() { 
      return sidO; 
     } 
     public void setSidO(int sidO) { 
      this.sidO = sidO; 
     } 

     @Id 
     @Column(name = "pnr_o", nullable = false) 
     private short pnrO; 
     public short getPnrO() { 
      return pnrO; 
     } 
     public void setPnrO(short pnrO) { 
      this.pnrO = pnrO; 
     } 

     @Basic 
     @Column(name = "ob1", nullable = false) 
     private int ob1; 
     public int getOb1() { 
      return ob1; 
     } 
     public void setOb1(int ob1) { 
      this.ob1 = ob1; 
     } 

     @Basic 
     @Column(name = "ob2", nullable = false) 
     private int ob2; 
     public int getOb2() { 
      return ob2; 
     } 
     public void setOb2(int ob2) { 
      this.ob2 = ob2; 
     } 

     @Basic 
     @Column(name = "ob3", nullable = false) 
     private int ob3; 
     public int getOb3() { 
      return ob3; 
     } 
     public void setOb3(int ob3) { 
      this.ob3 = ob3; 
     } 

     @Basic 
     @Column(name = "dtr", nullable = false) 
     private int dtr; 
     public int getDtr() { 
      return dtr; 
     } 
     public void setDtr(int dtr) { 
      this.dtr = dtr; 
     } 

     @Basic 
     @Column(name = "kpb", nullable = false) 
     private short kpb; 
     public short getKpb() { 
      return kpb; 
     } 
     public void setKpb(short kpb) { 
      this.kpb = kpb; 
     } 

     @Id 
     @Column(name = "pornom", nullable = false) 
     private short pornom; 
     public short getPornom() { 
      return pornom; 
     } 
     public void setPornom(short pornom) { 
      this.pornom = pornom; 
     } 



     @Override 
     public boolean equals(Object o) { 
      if (this == o) return true; 
      if (o == null || getClass() != o.getClass()) return false; 

      ILbgEntity that = (ILbgEntity) o; 

      if (sidO != that.sidO) return false; 
      if (pnrO != that.pnrO) return false; 
      if (ob1 != that.ob1) return false; 
      if (ob2 != that.ob2) return false; 
      if (ob3 != that.ob3) return false; 
      if (dtr != that.dtr) return false; 
      if (kpb != that.kpb) return false; 
      if (pornom != that.pornom) return false; 

      return true; 
     } 

     @Override 
     public int hashCode() { 
      int result = sidO; 
      result = 31 * result + (int) pnrO; 
      result = 31 * result + ob1; 
      result = 31 * result + ob2; 
      result = 31 * result + ob3; 
      result = 31 * result + dtr; 
      result = 31 * result + (int) kpb; 
      result = 31 * result + (int) pornom; 
      return result; 
     } 
    } 
package bg.moi.domain.models; 

import javax.persistence.Column; 
import javax.persistence.Id; 
import java.io.Serializable; 

public class ILbgEntityPK implements Serializable { 
    private int sidO; 
    private short pnrO; 
    private short pornom; 

    @Column(name = "sid_o", nullable = false, precision = 0) 
    @Id 
    public int getSidO() { 
     return sidO; 
    } 

    public void setSidO(int sidO) { 
     this.sidO = sidO; 
    } 

    @Column(name = "pnr_o", nullable = false) 
    @Id 
    public short getPnrO() { 
     return pnrO; 
    } 

    public void setPnrO(short pnrO) { 
     this.pnrO = pnrO; 
    } 

    @Column(name = "pornom", nullable = false) 
    @Id 
    public short getPornom() { return pornom; } 

    public void setPornom(short pornom) { this.pornom = pornom; } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     ILbgEntityPK that = (ILbgEntityPK) o; 

     if (sidO != that.sidO) return false; 
     if (pnrO != that.pnrO) return false; 
     if (pornom != that.pornom) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = sidO; 
     result = 31 * result + (int) pnrO; 
     result = 31 * result + (int) pornom; 
     return result; 
    } 
} 

类从数据库生成连接到iLbg

的例外是:

org.springframework.beans.factory.BeanCreationException:错误 创建名称为豆 '的entityManagerFactory' 在类路径中定义 资源 [组织/ springframework的的/ boot /自动配置/ ORM/jpa/HibernateJpaAutoConfiguration.class]: 调用init方法失败;嵌套的异常是 javax.persistence.PersistenceException:[PersistenceUnit:默认] 无法建立的SessionFactory在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) 〜[弹簧beans- 4.3.7.RELEASE.jar:4.3.7.RELEASE] org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 〜[spring-beans-4.3.7.RELEASE.jar :4.3.7.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 〜[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]在 org.springframework.be ans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306) 〜[弹簧豆-4.3.7.RELEASE.jar:4.3.7.RELEASE]在 org.springframework.beans.factory.support。 DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 〜[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java :302) 〜[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 〜[spring -beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081)(SpringApplicationContext.java:856) 〜[spring-context-4.3。]。 7.RELEASE.jar:4.3.7.RELEASE]在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 〜[弹簧上下文4.3.7.RELEASE.jar:4.3.7 .RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] at org.springframework.boot.SpringApplication .refreshContext(SpringApplication.java:370) [弹簧引导1.5.2.RELEASE.jar:1.5.2.RELEASE]在 org.springframework.boot.SpringApplic ation.run(SpringApplication.java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [弹簧引导1.5.2.RELEASE.jar:1.5.2.RELEASE]在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [弹簧引导1.5.2.RELEASE.jar: 1.5.2.RELEASE] bg.moi.Applicaion.main(Applicaion.java:13)[classes /:na]引起者: javax.persistence。PersistenceException:[PersistenceUnit:default] 无法构建Hibernate SessionFactory org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:954) 〜[hibernate-entitymanager-5.0.12.Final.jar: org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:882) 〜[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] at at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) 〜[弹簧ORM-4.3.7.RELEASE.jar:4.3.7.RELEASE]在 org.springframework.orm。 jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityM anagerFactory(LocalContainerEntityManagerFactoryBean.java:353) 〜[弹簧ORM-4.3.7.RELEASE.jar:4.3.7.RELEASE]在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) 〜[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) 〜[spring-orm-4.3.7 .RELEASE.jar:4.3.7.RELEASE]在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) 〜[弹簧豆-4.3.7.RELEASE.jar:4.3。 7.RELEASE]在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.ini tializeBean(AbstractAutowireCapableBeanFactory.java:1624) 〜[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] ... 15个常见帧 省略引起者: org.hibernate.tool.schema.spi .SchemaManagementException:无法 执行架构管理,JDBC目标[更改表i_lbg添加 约束外键(sid_o,pnr_o)引用l_bg约束 FK422xjl1722nwcy2wxv5yg6nbx]在 org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl。 (SchemaMigratorImpl.java:431) 〜 hibernate-core-5.0.12.Final.jar:5.0.12.Final]在 org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:420) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.tool。 schema.internal.SchemaMigratorImpl.applyForeignKeys(SchemaMigratorImpl.java:386) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets (SchemaMigratorImpl.java:214) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:60) org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:134) 〜[hibernate-core-5.0。hibernate-core-5.0。[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 12.F inal.jar:5.0.12.Final] at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:101) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final ] at org.hibernate.internal.SessionFactoryImpl。(SessionFactoryImpl.java:472) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.internal.SessionFactoryBuilderImpl .build(SessionFactoryBuilderImpl.java:444) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java: 879) 〜[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] ... 21 省略了通用帧引起:java.sql。SQLException:列集合上已存在相同类型的约束 。在 com.informix.util.IfxErrMsg.buildException(IfxErrMsg.java:474) 〜[JDBC-4.10.8.1.jar:4.10.8.1]在 com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:443 ) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:394) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:3191) 〜[JDBC-4.10.8.1.jar:4.10.8.1]在 com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3472) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2379) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix。 jdbc.IfxSqli.receiveMessage(IfxSqli.java:2304) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:874) 〜[jdbc- 4.10.8.1.jar:4.10.8.1] at com.informix.jdbc.IfxResultSet.executeUpdate(IfxResultSet.java:294) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.jdbc .IfxStatement.executeUpdateImpl(IfxStatement.java:1094) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.jdbc.IfxStatement.executeUpdateBody(IfxStatement.java:391) 〜[jdbc-4.10 .8.1.jar:4.10.8.1] at com.informix.jdbc.IfxStatement.executeUpdate(IfxStatement.java:279) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at org.hibernate.tool。模式.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] ... 31个公共帧 省略引起:java.sql.SQLException :null在 com.informix.util.IfxErrMsg.buildException(IfxErrMsg.java:474) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java :443) 〜[jdbc-4.10.8.1.jar:4.10.8.1] at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:394) 〜[jdbc-4.10.8.1.jar:4.10.8.1 ] at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3477) 〜[jdbc-4.10.8.1.jar:4.10.8.1] ... 39个常见帧被省略

有人有类似的问题吗? 有没有解决方法? 这可能是错误吗?!

回答

0

1)您只在实体类上放置@Id@Column注释。不要把它们放在ILbgEntityPK班。

2)不要在id类中添加setter ..创建一个接受id字段的构造函数。

3)当定义@JoinColumns尝试使用数据库列名,而不是实体的字段名称:

@OneToMany(targetEntity = ILbgEntity.class,fetch = FetchType.LAZY) 
@JoinColumns({@JoinColumn(name = "sid_o",referencedColumnName = "sid_o",insertable = false,updatable = false), 
     @JoinColumn(name = "pnr_o" ,referencedColumnName = "pnr_o",insertable = false,updatable = false)}) 
+0

我尝试如此,但冬眠抛出另一个异常 - 找不到属性的设置方法[Ilbgentitypk#pnrO] :(: –

+0

mmm ...你是否添加了构造函数?如果添加setter,会发生什么? –

+0

是:)添加构造函数并恢复setter并抛出以前的异常。 –

0

使用下面的代码在@OneToMany

@OneToMany(targetEntity = ILbgEntity.class, orphanRemoval = true, cascade = { CascadeType.ALL, CascadeType.REMOVE }) 
@JoinColumn(name = "sid_o", nullable = false) 
@LazyCollection(LazyCollectionOption.FALSE) 
@Fetch(FetchMode.SUBSELECT) 
+0

关于如何解决问题的更多解释将有助于未来的读者。 –

+0

@ M.leRutte将以上所有注释放在您想要一对多关系的字段上。无需将其放在目标表上。 –