问题 JPA是否有类似hibernates的“@GenericGenerator”来生成自定义ID?


我正在尝试创建一种自定义的计算方式,并传递遵循我自己的模式的唯一ID。

Hibernate具有@GenericGenerator注释,允许您映射自定义类以计算唯一ID并将其分配回@Id列。

  @Id 
  @GeneratedValue(generator="MyIdGenerator")
  @GenericGenerator(name="MyIdGenerator", strategy="com.test.MyIdGenerator")

问题是我不想在包级别使用(休眠)@GeGeneGenerator。 这可以是“纯粹的”JPA / 2吗?

谢谢你的时间。


12051
2017-09-18 13:51


起源



答案:


不,它没有。只有没有第三方的可能性是自己分配价值。如果你想从调用设置id的方法中保存自己,那么可以使用例如Prepersist回调。

  @PrePersist
  public void ensureId() {
    id = ...
  }

16
2017-09-18 14:25



非常优雅的解决方案。真的允许吗?当规范说明时,规范是不明确的:通常,可移植应用程序的生命周期方法不应该调用EntityManager或查询操作,访问其他实体实例,或修改同一持久化上下文中的关系[46]。生命周期回调方法可以修改调用它的实体的非关系状态。 - Carlo Pellegrini


答案:


不,它没有。只有没有第三方的可能性是自己分配价值。如果你想从调用设置id的方法中保存自己,那么可以使用例如Prepersist回调。

  @PrePersist
  public void ensureId() {
    id = ...
  }

16
2017-09-18 14:25



非常优雅的解决方案。真的允许吗?当规范说明时,规范是不明确的:通常,可移植应用程序的生命周期方法不应该调用EntityManager或查询操作,访问其他实体实例,或修改同一持久化上下文中的关系[46]。生命周期回调方法可以修改调用它的实体的非关系状态。 - Carlo Pellegrini


如果您使用的是EclipseLink,则可以定义自己的自定义Sequence对象。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/CustomSequencing

JPA 2.0没有定义自定义序列生成器,但JPA 2.1确实定义了一个可能有用的Converter API。


0
2018-03-25 14:24



转换器不能用于Id - Marx