gpt4 book ai didi

java - 如何在字段级别创建元注释?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:54 24 4
gpt4 key购买 nike

我有这个带注释的 hibernate 类:

@Entity
public class SimponsFamily{

@Id
@TableGenerator(name = ENTITY_ID_GENERATOR,
table = ENTITY_ID_GENERATOR_TABLE,
pkColumnName = ENTITY_ID_GENERATOR_TABLE_PK_COLUMN_NAME,
valueColumnName = ENTITY_ID_GENERATOR_TABLE_VALUE_COLUMN_NAME)
@GeneratedValue(strategy = GenerationType.TABLE, generator = ENTITY_ID_GENERATOR)
private long id;

...
}

因为我不会以这种方式注释我的类的每个 id 字段,所以我尝试创建一个自定义注释:

@TableGenerator(name = ENTITY_ID_GENERATOR,
table = ENTITY_ID_GENERATOR_TABLE,
pkColumnName = ENTITY_ID_GENERATOR_TABLE_PK_COLUMN_NAME,
valueColumnName = ENTITY_ID_GENERATOR_TABLE_VALUE_COLUMN_NAME)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface EntityId {

@GeneratedValue(strategy = GenerationType.TABLE, generator = ENTITY_ID_GENERATOR)
public int generator() default 0;

@Id
public long id() default 0;
}

这样我就可以在我的类里面使用这个注解:

 @Entity
public class SimponsFamily{


@EntityId
private long id;

...
}

我必须在字段级别编写 @Id@GeneratedValue 注释,因为它们不支持 TYPE RetentionPolicy。此解决方案似乎有效。

我的问题:

  • 我的自定义注释(和值)中的字段级注释如何转移到我对 EntityId 注释的使用?

  • 我在自定义注释中设置的默认值如何,因为我没有在使用时指定属性,所以它们被使用了吗?

  • 在注释中使用字段级别的注释是首选方式吗?

最佳答案

我想我可以回答你的第三个问题。

做你想做的事情(避免重复 ID 映射)的一种常用方法是创建一个通用父类(super class),其中包含带注释的 idversion(用于乐观锁定)字段,然后让所有持久对象扩展这个父类(super class)。为确保父类(super class)本身不被视为实体,必须使用 @MappedSuperclass 对其进行注释。

这是一个示例(抱歉打字错误,我现在手头没有 IDE):

@MappedSuperclass
public class PersistentObject {

@Id // Put all your ID mapping here
private Long id;

@Version
private Long version;

}

@Entity
public class SimpsonsFamily extends PersistentObject {
// Other SimpsonFamily-specific fields here, with their mappings
}

关于java - 如何在字段级别创建元注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com