默认情况下如何在休眠中使用自定义密钥生成器

时间:2016-04-01 23:45:39

标签: java hibernate jpa

我希望能够在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。

1 个答案:

答案 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在这里很重要:

  

指定一个其映射信息应用于的类   从中继承的实体。映射的超类没有单独的   为它定义的表。