我希望能够在休眠状态下使用自己的自定义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")
        })


好多啊。我想在休眠状态下看到“ @Id”的地方进行设置
默认情况下,它将调用我的生成器并将其分配给ID。

最佳答案

我通常这样做的方法是创建一个包含共享的带注释的变量的超类,并使实体对其进行扩展。例:

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


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

关于java - 默认情况下如何在 hibernate 状态下使用自定义 key 生成器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36367538/

10-09 21:05