JPA:创建自定义ID注释

时间:2018-08-11 16:09:30

标签: java spring

我正在为实体的id字段创建一个新的自定义id注释:

@Id
@GeneratedValue(generator = RandomAlphanumericIdGenerator.generatorName)
@GenericGenerator(name = RandomAlphanumericIdGenerator.generatorName, strategy = "com.boot.myproject.utils.RandomAlphanumericIdGenerator")
private String id;

工作正常。但是我想将所有这三个注释归为一个新注释:

@Id
@GeneratedValue(generator = RandomAlphanumericIdGenerator.generatorName)
@GenericGenerator(name = RandomAlphanumericIdGenerator.generatorName, strategy = "com.boot.myproject.utils.RandomAlphanumericIdGenerator")
@Target({FIELD})
@Retention(RUNTIME)
public @interface RandomAlphanumericId {

}

似乎不起作用,因为它给出了以下错误:The annotation @Id is disallowed for this location

我想知道是否可以将这些注释归为一个。

2 个答案:

答案 0 :(得分:2)

否,不可能。 JPA没有这种元注释的概念(如错误消息所示)。

请注意,这个问题与Spring无关,因为所有这些注释都是JPA注释,而不是Spring注释。

答案 1 :(得分:0)

Spring Boot不提供此注释的实现。这是JPA实施(例如Hibernate)的责任。众所周知,您不能为Hibernate引入新的Id注释。标准JPA批注是标准的一部分,因此无法替换。您唯一可以做的-创建自定义子类,该子类将分配所需的ID,或实现一些Factory来创建具有分配的ID的实体实例。