【发布时间】:2011-09-26 15:02:00
【问题描述】:
我们使用 H2、JPA 注释、Spring 和 Hibernate 的组合来开发我们的 web 应用程序。我们在 MODE=Oracle 的兼容模式下使用 H2。
我们有一个与 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 控制台查看数据库,我可以看到 中相应行的外键 (IT_SYSTEM_EDW_ID) ITSYSTEM_AKA 表被设置为空。
按照 H2 网站上的建议,我尝试使用 Oracle 方言而不是本地 H2 方言,但它产生了相同的结果。我还尝试使用实际的 Oracle 数据库而不是 H2,在这种情况下一切似乎都正常。
你知道出了什么问题吗?
任何帮助将不胜感激。
问候, 普里耶什
【问题讨论】:
标签: hibernate jpa one-to-many h2