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

时间:2017-04-15 09:03:48

标签: hibernate annotations

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

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

@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)在同一个包中,我有一个具有以下属性的实体:

@Id
@GeneratedValue(generator = "ID_GENERATOR")
private Long id;

这导致异常"未知Id.generator:ID_GENERATOR"。如果我在实体类中包含@GenericGenerator注释,它可以正常工作。但是,我想将其移至包级别,以便我可以在其他实体中重用它。

断开连接的想法是什么?

谢谢!

3 个答案:

答案 0 :(得分:4)

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

@Id
@SequenceGenerator(name="my_id_generator", sequenceName="ID_GENERATOR")
@GeneratedValue(generator="my_id_generator")
private Long id;

来源:link

答案 1 :(得分:1)

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

再见

答案 2 :(得分:0)

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

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