【发布时间】:2018-11-10 16:23:49
【问题描述】:
我的本地 postgres 数据库中有 10-15 个实体。 所有实体都包含一个整数类型的标识。请参阅下面的代码片段。
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", unique = true, nullable = false)
@NonNull
private Integer id;
我的 CRUD(T 是我的实体)类包含用于将新实体插入适当表的 create 方法
private final JpaRepository<T, Integer> jpaRepository;
private final EntityManager entityManager;
private final Class<T> clazz;
@Override
public T create(T entity) {
return getJpaRepository().saveAndFlush(entity);
}
我正在努力实现下一个目标:
- 如果我调用 create 方法,其中实体包含 id 字段的某些值 (
!= null),然后将其完全保存为该 id(未生成)。 - 如果我调用 create 方法,其中实体包含值
== null- 然后使用数据库提供的自动生成的 ID 创建它。
为什么我需要这个? 我正在尝试使用从 JSON 实体中获取的实体填充内存中的小型数据库,并使用相同的 id 保存它。
我的问题是注释@GeneratedValue(strategy = GenerationType.AUTO/SEQUENCE/TABLE/IDENTITY) 没有给我这样的东西。
如果我删除 GeneratedValue 注释,则 null 值将无法正确处理。
非常感谢您的建议。
添加评论折叠
【问题讨论】:
-
JPA 规范仅在 null 时不支持选择性生成值。您必须转到特定的 JPA 提供程序扩展来寻找该支持。我知道 DataNucleus JPA 允许这样做,但您没有说明您使用的是哪个 JPA 提供程序,因此无法进一步评论
-
@BillyFrost 提供者是休眠
-
当你在它的文档中查看关于尝试做你想做的事情时?
-
@BillyFrost,类似于 EntityManager.persist(entity) 和刷新持久性上下文,但与 jpaRepository.saveAndFlush(entity) 不同,它会导致约束(分离实体)出现问题。
-
这与价值产生有什么关系?你的问题是关于的,我建议你看看 Hibernate docs about
标签: java spring jpa spring-data-jpa identity