我希望能够在hibernate中使用我自己的自定义id生成器,但是没有每个实体的几个注释的混乱。
示例:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator")
@GenericGenerator(name = "XyzIdGenerator",
strategy = "com.mycompany.myapp.id.BigIntegerSequenceGenerator",
parameters = {
@Parameter(name = "sequence", value = "xyz_id_sequence")
})
那是很多。如果hibernate看到“@Id”,我想把它设置在哪里 它默认会调用我的生成器并将其分配给id。
答案 0 :(得分:0)
我通常这样做的方法是创建一个超类,它包含共享的注释变量并使实体扩展它。例如:
@MappedSuperclass
public class PersistableEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator")
@GenericGenerator(name = "XyzIdGenerator",
strategy = "com.mycompany.myapp.id.BigIntegerSequenceGenerator",
parameters = {
@Parameter(name = "sequence", value = "xyz_id_sequence")
})
protected Long id;
// ...
}
@Entity
public class Abc extends PersistableEntity {}
@MappedSuperclass
在这里很重要:
指定一个其映射信息应用于的类 从中继承的实体。映射的超类没有单独的 为它定义的表。