如何将自定义对象 ID 注入 JPA 实体

发布于 2024-09-16 10:11:05 字数 308 浏览 6 评论 0原文

我正在将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

徒留西风 2024-09-23 10:11:05

更新:

更好的方法是在生成字段上实际指定序列策略并指定自定义序列类。

JPA 每次插入新对象时都会调用此类的 nextId() 方法。

此方法允许保留完整的图,而无需手动干预每个实体。


想通了。极其复杂;) - 只需从关键字段中删除 generatedValue 注释即可。

它适用于 SSN 或电子邮件等本地 ID,但无论来源如何都可以使用。

@Entity
public class Client{

    @Id
    @Column(name="CLNT_ID") 
    private long key;
    @Column(name="CLNT_NUM")
    private String clientNumber;
...
}

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.

@Entity
public class Client{

    @Id
    @Column(name="CLNT_ID") 
    private long key;
    @Column(name="CLNT_NUM")
    private String clientNumber;
...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文