实体是否持久填充 id 字段
Does entity persisting populate id field
我的问题是关于 class 对象在 persising 后的 id 字段填充。此 class 示例下方的示例问题
@Entity
class SomeEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
}
假设我想像这样将新实体持久化到 repo:
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
问题是 - 如果我想使用在数据库中自动生成的 id 字段,我是否必须再次提取该实体:
SomeEntity foundEntity = someEntitiyRepository.findTheEntitySomehow(someargs);
System.out.println(foundEntity.getId());
或者我可以开箱即用?
// Copy code from above
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
System.out.println(entity.getId());
SomeEntity entity = new SomeEntity(someArgs);
SomeEntity saved= someEntityRepository.save(entity);
Syster.out.println(saved.getId());
每当我们尝试使用 Id 时,状态将更改为持久化状态并获取 Id 值。
我们需要使用存储库 return 对象中的 Id 值。
当您使用存储库保存方法时,Hibernate 不会向数据库发送新记录,直到执行任何刷新操作(如关闭持久上下文或调用 JPQL 语句)。
为确保您拥有一个 ID,您必须手动调用刷新。它可以在任何存储库上调用,并且所有持久上下文都将被刷新。也可以使用 saveAndFlush()
存储库方法。
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.saveAndFlush(entity);
System.out.println(entity.getId());
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
someEntityRepository.flush();
System.out.println(entity.getId());
请记住,如果您没有未完成的交易(带有 @Transactional
注释),则仅调用 save()
方法也可以。因为 save()
方法将使用自己的 @Transactional
来打开和关闭持久上下文本身。
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
System.out.println(entity.getId());
我的问题是关于 class 对象在 persising 后的 id 字段填充。此 class 示例下方的示例问题
@Entity
class SomeEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
}
假设我想像这样将新实体持久化到 repo:
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
问题是 - 如果我想使用在数据库中自动生成的 id 字段,我是否必须再次提取该实体:
SomeEntity foundEntity = someEntitiyRepository.findTheEntitySomehow(someargs);
System.out.println(foundEntity.getId());
或者我可以开箱即用?
// Copy code from above
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
System.out.println(entity.getId());
SomeEntity entity = new SomeEntity(someArgs);
SomeEntity saved= someEntityRepository.save(entity);
Syster.out.println(saved.getId());
每当我们尝试使用 Id 时,状态将更改为持久化状态并获取 Id 值。 我们需要使用存储库 return 对象中的 Id 值。
当您使用存储库保存方法时,Hibernate 不会向数据库发送新记录,直到执行任何刷新操作(如关闭持久上下文或调用 JPQL 语句)。
为确保您拥有一个 ID,您必须手动调用刷新。它可以在任何存储库上调用,并且所有持久上下文都将被刷新。也可以使用 saveAndFlush()
存储库方法。
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.saveAndFlush(entity);
System.out.println(entity.getId());
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
someEntityRepository.flush();
System.out.println(entity.getId());
请记住,如果您没有未完成的交易(带有 @Transactional
注释),则仅调用 save()
方法也可以。因为 save()
方法将使用自己的 @Transactional
来打开和关闭持久上下文本身。
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
System.out.println(entity.getId());