【发布时间】:2018-03-20 07:31:24
【问题描述】:
我正在将旧项目(Core Java + EJB + hibernate)从 hibernate 3 迁移到 hibernate 5.2.12。虽然 hibernate 5.2.12 支持 .hbm.xml 文件,但作为从 .hbm 文件迁移到带注释文件的渐变的一部分。
下面是我的场景,数据模型是紧耦合类。
public interface BaseEntity extends Serializable, Cloneable, Observable
{
public void setId(long id);
public long getId();
... few other generic attributes
}
public class BaseClass implements BaseEntity {
protected long id;
public void setId(long id)
{
this.id = id;
}
public long getId()
{
return objectId;
}
.. few other attributes
}
public class AuditableBaseClass extends BaseClass implements BaseEntity, Audit
{
... few other attributes
}
public class Car extends AuditableBaseClass {
.... some attributes
}
public class Bike extends AuditableBaseClass {
...some attributes
}
public class Truck extends AuditableBaseClass {
... some attributes
}
如果我们查看下面现有的 .hbm.xml 文件,对于不同的类使用不同的序列
<class name="Car" table="Car">
<id name="id" type="long" column="id">
<generator class="sequence">
<param name="sequence">SEQ_CAR</param>
</generator>
</id>
<
// some other properties
</class>
<class name="Bike" table="Bike">
<id name="id" type="long" column="id">
<generator class="sequence">
<param name="sequence">SEQ_BIKE</param>
</generator>
</id>
// some other properties
</class>
<class name="Truck" table="Truck">
<id name="objectId" type="long" column="id">
<generator class="sequence">
<param name="sequence">SEQ_TRUCK</param>
</generator>
</id>
</class>
@Id 使用序列的简单定义如下
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "sequence-generator" )
@SequenceGenerator( name = "sequence-generator", sequenceName = "SEQ_NAME" )
事实上,我知道我们需要使用@MappedSuperclass 来表示超类。如何表示@Id 列的sequence 属性,该列使用不同子类的不同序列,尽管所有类都继承属性id,但每个类使用不同的序列。
请问有什么帮助吗?
【问题讨论】:
标签: java hibernate migration hibernate-mapping