首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.hibernate.AnnotationException:未知Id.generator: ID_GENERATOR

org.hibernate.AnnotationException:未知Id.generator: ID_GENERATOR
EN

Stack Overflow用户
提问于 2017-04-15 17:03:48
回答 3查看 5.5K关注 0票数 4

我正在尝试在包级别创建@GenericGenerator注释,以便包中的所有实体都可以使用它。

1)我有一个包含注释的package-info.java类:

代码语言:javascript
复制
@org.hibernate.annotations.GenericGenerator(name = "ID_GENERATOR",                  strategy = "enhanced-sequence", parameters = {
    @org.hibernate.annotations.Parameter(name = "sequence_name", value = "JPWH_SEQUENCE"),
    @org.hibernate.annotations.Parameter(name = "initial_value", value = "1000") })
package com;

2)在同一个包中,我有一个具有以下属性的实体:

代码语言:javascript
复制
@Id
@GeneratedValue(generator = "ID_GENERATOR")
private Long id;

这会导致一个异常“未知的Id.generator: ID_GENERATOR”。如果我在entity类中包含@GenericGenerator注释,它就能正常工作。然而,我想把它移到包级别,这样我就可以在其他实体中重用它。

有没有什么想法会导致脱节呢?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2017-04-23 20:12:24

您可以将实体代码更改为:

代码语言:javascript
复制
@Id
@SequenceGenerator(name="my_id_generator", sequenceName="ID_GENERATOR")
@GeneratedValue(generator="my_id_generator")
private Long id;

来源:link

票数 5
EN

Stack Overflow用户

发布于 2017-04-15 21:40:48

我认为你犯了一个设计错误。如果你想在你的模型类之间有一个共同的东西,使用继承。您可以创建一个AbstractEntity类来定义id生成器。你的模型的每个类都是从这个抽象继承而来的。这是一种常见的模式。您还可以将传统的通用属性created、createdBy、updated、updatedBy和为什么不是sysname。使用hibernate id生成器并不真正有意义。

再见

票数 1
EN

Stack Overflow用户

发布于 2018-03-19 23:47:17

我将package-info文件放在一个包中,然后用子包填充它,如下所示:

代码语言:javascript
复制
org.persistence
    package-info
org.persistence.someclasses
    PersistenceClass
org.persistennce.otherclasess
    OtherPersistenceClass

这在几个小时内没有其他动作。然后,我在cfg.file中添加、更改和删除了一些值,在添加<mapping package="org.persistence"/>行之前,这些操作都不再起作用

然后它又起作用了。我在这里找到了答案:

Using @GenericGenerator in a package level annotation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43424203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档