我有一个类层次:

abstract DomainObject {
...
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ")
    @SequenceGenerator(name="SEQ",sequenceName="SEQ_DB_NAME")
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
...
}

BaseClass extends DomainObject {
...
   // Fill in blank here where this class's @Id will use a unique sequence generator
   // bonus points for any sort of automatic assignment of generator names that might 
   //prevent me from having to instrument all my domain objects uniquely
...
}

注:

  • 我不具体需要的基类发电机,所以,如果有必要我要删除它,没问题。
  • 这是一个oracle9i db如果适用
  • 休眠3.4访问用户
  • 弹簧2.5可以作为很好

感谢

有帮助吗?

解决方案

好了这里就是我结束了解决这个问题:

基类:

@MappedSuperclass
public abstract class DomainObject implements Serializable {
 @Id
 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ")
 @Column(name = "id", updatable = false, nullable = false)
 private Long id;

 .. rest of class
}

后裔类别:

@Entity
@SequenceGenerator(name="SEQ",sequenceName="SEQ_DB_NAME")
public class BusinessObject extends DomainObject {

 ...

}

其他提示

我建议你使用的加入继承类型的基类。这将使所有的公共领域的基础表和定义在具体的表。这里是标注为:

@Inheritance(strategy=InheritanceType.JOINED)

一旦这样做了,你几乎可以使用任何排序的选择,因为所有的标识是始终在同一表格。你可以用一个单独的序列,如果你想要的,但它不支持在所有数据库的供应商。我猜这不是一个问题,因为你使用Oracle具体的说明。

我用这个和这似乎运作良好。

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top