java - 默认情况下如何在 hibernate 中使用自定义 key 生成器

标签 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。

最佳答案

我通常这样做的方法是创建一个父类(super class),其中包含共享的带注释的变量并使实体扩展它。示例:

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

Designates a class whose mapping information is applied to the entities that inherit from it. A mapped superclass has no separate table defined for it.

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

相关文章:

java - Log4J2 配置中的主要参数

java - Spring Hibernate查询与非主键的一对一关系

java - 合并 Hibernate 集合中的项目

java - 如何调试 "Found two representations of same collection"?

java - Liferay如何调用新 View

java - 使用JAVA从TFTP服务器获取文件大小,无需下载文件

java - 在elasticsearch查询中配置搜索词的标记化

java - Hibernate 自动生成第二个 id

java - 未知实体类型异常 : Unable to locate persister

java - Hibernate Inheritance.TABLE_PER_CLASS 策略