- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的项目中有许多实体使用相同的自定义 IdentifierGenerator
来使用 SpringDataJPA/Hibernate
生成 @Id
。
示例实体;
@Entity
@Table(name = "CHAIRS")
public class ChairEntity {
@Id
@GeneratedValue(generator = "myGenerator")
@GenericGenerator(strategy = "a.b.jpa.generator.MyGenerator", name = "myGenerator")
protected String id;
// rest of the entity
}
但我不想为每个实体的每个 id 字段重复 @GenericGenerator
减速。有没有办法隐藏这个包含丑陋的硬编码完整类名的注释?
后记述
我之前使用 @MappedSuperClass
和包含 id
字段的 BaseEntity
类,但由于某些技术原因,我不得不放弃使用这样的父类(super class)。显然这是这个问题最简单的解决方案。
最佳答案
我想出的解决方案是一个 Java 技巧,我的所有实体都在 a.b.jpa.entity
下,我的生成器在 a.b.jpa.generator
下,并且自从 >@GenericGenerator
可以直接在类上使用,我为a.b.jpa.entity
包创建了一个package-info.java
,其中包含以下内容;
@GenericGenerator(strategy = "a.b.jpa.generator.MyGenerator", name = MyGenerator.generatorName)
package a.b.jpa.entity;
import org.hibernate.annotations.GenericGenerator;
import a.b.jpa.generator.MyGenerator;
使用 @GenericGenerator
注释 a.b.jpa.entity
下的所有类,这是我的问题的完美解决方案。本质上使其可供所有实体使用。
生成器的代码;
public class MyGenerator implements IdentifierGenerator {
public static final String generatorName = "myGenerator";
@Override
public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object object) throws HibernateException {
return GeneratorUtil.generate();
}
}
以及处于以下状态的实体;
@Entity
@Table(name = "CHAIRS")
public class ChairEntity {
@Id
@GeneratedValue(generator = MyGenerator.generatorName)
protected String id;
// rest of the entity
}
这成功了,现在 @GenericGenerator
被定义在一个位置,为我的所有实体提供 MyGenerator
详细信息(如果其中任何一个实体希望使用它) ,他们只是利用 @GeneeratedValue
。
关于java - 如何使用相同的自定义 id 生成器统一多个实体的 @GenericGenerator 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934878/
我在 Spring Boot 项目 (Hibernate 5) 中尝试了 Hibernate 的 @GenericGenerator。制作了这样的测试实体: @Entity public class
我正在尝试在包级别创建一个@GenericGenerator 注释,以便包中的所有实体都可以使用它。 1) 我有一个带有注释的 package-info.java 类: @org.hibernate.
我正在学习 Hibernate .... @Id @GeneratedValue(generator="foreign") @GenericGenerator(name="foreign", stra
根据这篇文章https://vladmihalcea.com/hibernate-and-uuid-identifiers/ 我想为我的类(class)生成 hibernate UUID。 Intel
我之前有一个 @SequenceGenerator 的代码,参数为 allocationSize=1 我需要用自定义的 @GenericGenerator 覆盖 SequenceGenerator。但
有时我发现他们在一起,有时单独......其他时候他们似乎也这样做。 有什么区别? 这里有三个例子。他们有什么不同?为什么我不能对所有这些都只使用@GeneratedValue? 示例 1 @Id @
学习java,我还没有看到明确的答案。任何澄清表示赞赏。 @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid"
我的项目中有许多实体使用相同的自定义 IdentifierGenerator 来使用 SpringDataJPA/Hibernate 生成 @Id。 示例实体; @Entity @Table(name
我已经将我的类映射如下(省略了其他字段,因为只有 ID 很重要): @Entity @Table(name = "MODEL_GROUP") @Cache(usage = CacheConcurren
我正在尝试创建一种自定义的计算方式并传递遵循我自己的模式的唯一 ID。 Hibernate 具有 @GenericGenerator 注释,它允许您映射自定义类以计算唯一 id 并将其分配回 @Id
我想知道是否有标准的方法来转换类似的东西 @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Param
我是一名优秀的程序员,十分优秀!