我尝试在包级别创建@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注释,它可以正常工作。但是,我想将其移至包级别,以便我可以在其他实体中重用它。
断开连接的想法是什么?
谢谢!
答案 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"/>
然后它再次起作用。我在这里找到答案: