java如何动态初始化Annotation

时间:2015-03-07 15:18:57

标签: java hibernate jpa orm hibernate-mapping

我有以下结构:

@MappedSuperclass
public class AbstractEntitySequence {

@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator="X?" )
@SequenceGenerator( allocationSize = 1, name = "X?" )
@Column( name = "id", nullable = false, unique = true )
private Long id;

和子实体:

@Entity
@Table( name = "BANK" )
public class Bank extends AbstractEntitySequence implements Serializable {
...
}

和其他实体。

我需要每个实体都有一个SEQUENCE生成器名称,我不希望将它放在每个实体中(如^ C ^ V) 是否有可能以某种方式从子类初始化Abstract类中的注释(替换X1)?

1 个答案:

答案 0 :(得分:0)

您只能在一个实体类中定义@SequenceGenerator,它将可用于所有实体,因为根据JavaDoc:

  

生成器名称的范围对于持久性单元是全局的   (跨所有发电机类型)。

所以,这就是你的映射应该是这样的:

@Entity
@SequenceGenerator(name="X", allocationSize=1)
public class Bank {

    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="X")
    @Id long id;
}

@Entity
public class InsuranceCompany {

    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="X")
    @Id long id;
}