org.hibernate.AnnotationException:未知Id.generator:Id\U生成器

org.hibernate.AnnotationException:未知Id.generator:Id\U生成器,hibernate,annotations,Hibernate,Annotations,我试图在包级别创建@GenericGenerator注释,以便包中的所有实体都可以使用它 1) 我有一个带有注释的package-info.java类: @org.hibernate.annotations.GenericGenerator(name = "ID_GENERATOR", strategy = "enhanced-sequence", parameters = { @org.hibernate.annotations.Parameter(n

我试图在包级别创建@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”。如果我在entity类中包含@GenericGenerator注释,它可以正常工作。但是,我想将其移动到包级别,以便在其他实体中重用它

有没有什么想法可以让我们分开


谢谢

我认为你犯了一个设计错误。 如果希望模型类之间有一个共同点,请使用继承。 您可以创建定义id生成器的AbstractEntity类。模型中的每个类都继承自这个域。 这是一种常见的模式。您还可以将传统的公共属性created、createdBy、updated、updatedBy和why not放入sysname。 使用hibernate id生成器实际上没有意义


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

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

来源:

我将包信息文件放入包中,然后用子包填充它,如下所示:

org.persistence
    package-info
org.persistence.someclasses
    PersistenceClass
org.persistennce.otherclasess
    OtherPersistenceClass
这在几个小时内没有采取其他行动。然后,我在
cfg.file
中添加、更改和删除了一些值,这不再有效,直到我添加了行

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