我們使用H2,JPA註解,Spring和Hibernate的組合來開發我們的web應用程序。我們在兼容模式下使用H2,使用MODE = Oracle。與H2,JPA註解和Hibernate使用一對多關聯問題
我們擁有一個具有與ItSystemAka類的一個一對多的關聯如下的ItSystem類:
@Entity
@Table(name="ITSYSTEM")
public class ItSystem implements Serializable {
private static final long serialVersionUID = 1L;
private static final String SEQ_NAME = "SeqName";
private static final String SEQUENCE = "sequence";
@Id
@GeneratedValue(generator = SEQ_NAME)
@GenericGenerator(name = SEQ_NAME,strategy = SEQUENCE, parameters = { @Parameter(name = SEQUENCE, value = "IT_SYSTEM_SEQ") })
@Column(name="ITSYSTEM_EDW_ID")
private BigDecimal itSystemEdwId;
@Column(name="ITSYSTEM_VERSION_ID")
private BigDecimal itSystemVersionId;
@OneToMany(fetch = FetchType.EAGER, cascade={CascadeType.ALL})
@JoinColumn(name="ITSYSTEM_EDW_ID")
private Set<ItsystemAka> itSystemAkas;
.....
}
@Entity
@Table(name="ITSYSTEM_AKA")
public class ItSystemAka implements Serializable {
private static final long serialVersionUID = 1L;
private static final String SEQ_NAME = "SeqName";
private static final String SEQUENCE = "sequence";
@Id
@GeneratedValue(generator = SEQ_NAME)
@GenericGenerator(name = SEQ_NAME,strategy = SEQUENCE, parameters = { @Parameter(name = SEQUENCE, value = "IT_SYSTEM_AKA_SEQ") })
@Column(name="AKA_EDW_ID")
private BigDecimal akaEdwId;
private String aka;
@Column(name="ITSYSTEM_EDW_ID")
private BigDecimal itSystemEdwId;
....
}
我們使用以下連接屬性:
myDataSource.driverClassName=org.h2.Driver
myDataSource.url=jdbc:h2:~/test;MODE=Oracle;DB_CLOSE_DELAY=-1
myDataSource.username=sa
myDataSource.password=
sessionFactory.hibernateProperties[hibernate.dialect]=org.hibernate.dialect.H2Dialect
sessionFactory.hibernateProperties[hibernate.hbm2ddl.auto]=create
sessionFactory.hibernateProperties[hibernate.show_sql]=false
sessionFactory.hibernateProperties[hibernate.connection.autocommit]=false
sessionFactory.hibernateProperties[hibernate.format_sql]=true
如果我們有一個帶有多個ItSystemAka實例的ItSystem實例,我們試着將ItSystem實例更新到數據庫,然後它將失去對所有關聯的ItSystemAkas的引用。用H2 Console查看數據庫,可以看到 ITSYSTEM_AKA表中相應行的 foregin key(IT_SYSTEM_EDW_ID)被設置爲null。
我試過在H2網站上使用Oracle Dialect代替本地H2方言,但它會產生相同的結果。我也嘗試使用實際的Oracle數據庫而不是H2,在這種情況下,一切似乎都正常工作。
任何想法是什麼問題?
任何幫助將不勝感激。
問候, Priyesh
這個工作,但是我們希望能夠用一個單向一個一對多的關聯。我也不明白爲什麼對具有單向一對多關聯的實體的更新可以與Oracle協同工作,但不能與H2協同工作。問候,Priyesh – Priyesh
首先,如果你試圖映射 '@Column(name =「ITSYSTEM_EDW_ID」)' 'private BigDecimal itSystemEdwId; 「你試圖讓你的協會成爲雙面的。 – Yappie