9

我有一个类层次结构:

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
...
}

笔记:

  • 我并不特别需要基类生成器,所以如果我应该删除它也没问题。
  • 如果适用,这是一个 oracle 9i db
  • 休眠 3.4 JPA
  • Spring 2.5 也可用

谢谢

4

2 回答 2

9

好的,这就是我最终解决问题的方法:

基类:

@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 {

 ...

}
于 2009-11-24T16:50:40.493 回答
0

我建议您对基类使用 JOINED 继承类型。这会将所有公共字段放在基表中,并将自定义项放在特定表中。这是对此的注释:

@Inheritance(strategy=InheritanceType.JOINED)

完成后,您几乎可以使用任何排序选项,因为您的所有 ID 总是在同一张桌子上。如果需要,您可以使用单独的序列,但并非所有数据库供应商都支持。我想这不是问题,因为您专门使用 Oracle。

我用过这个,它似乎运作良好。

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
于 2009-06-23T14:00:08.147 回答