如何将自定义对象 ID 注入 JPA 实体
我正在将 JPA 2 用于企业应用程序,我的 DBA 给了我一个惊喜。
他们希望我对我的所有表使用该组的集中对象 ID 生成器。这意味着我需要调用 Web 服务来获取一批约 50 个 id,而不是使用表值或序列表。
然后,当我保留任何新对象时,我需要先注入这个 id,并将其保存到表中。
那么我将如何操作实体的 @Id 列来处理这个问题。
难道是像设置一个key然后再坚持那么简单吗?我怀疑这会引发某种带有 ID 设置错误的非托管实体。
I am using JPA 2 for an enterprise application, and my DBA's just hit me with a twist.
They want me to use the group's centralized object ID generator for all my tables. This means rather than using table values or a sequence table, I will need to call a web service to get a batch of ~50 ids.
Then, as I persist any new object, I would need to inject this id first, and save that to the table.
So how would I manipulate the @Id column of an entity to handle this.
Is it as simple as setting a key before I persist? I suspect that would throw some sort of unmanaged entity with ID set error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
更新:
更好的方法是在生成字段上实际指定序列策略并指定自定义序列类。
JPA 每次插入新对象时都会调用此类的 nextId() 方法。
此方法允许保留完整的图,而无需手动干预每个实体。
想通了。极其复杂;) - 只需从关键字段中删除 generatedValue 注释即可。
它适用于 SSN 或电子邮件等本地 ID,但无论来源如何都可以使用。
Update:
The better method is to actually specify a Sequence strategy on Generated fields and specify a custom Sequence class.
JPA will then call this class's nextId() method every time it inserts a new object.
This method allows full graphs to be persisted without intervening on each entity manually.
Figured it out. Amazingly complex ;) - just remove the GeneratedValue annotation from the key field.
It is intended for Native Ids like SSN or email, but works regardless of source.