gpt4 book ai didi

java - 支持无状态和有状态使用的 JPA 代码

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:24 24 4
gpt4 key购买 nike

我有两个共享数据库的应用程序。一个应用程序处理来自队列的消息,另一个应用程序具有支持与队列使用的完全相同的功能(以及许多其他功能)的 JSF 屏幕。 JPA 代码中有相当大的重叠,因此我想为两个应用程序创建一个可重用的模块(因为当我对 JPA 查询进行更改时,我必须将其应用到两个应用程序)。

现在我们在数据库的每一行上都附加了一个用户 ID。当为了响应队列消息而创建行时,用户 ID 是静态的“SYSTEM_X_ID”(例如)。但是,当用户通过 JSF 屏幕创建该行时,它将是 session 中的用户 ID。

这就是我的问题所在 - 应用程序的队列版本没有 session 。 session 对象被注入(inject)。那么,如何编写可重用的数据库代码来检查是否存在将注入(inject) JSF 应用程序而不是队列应用程序中的注入(inject) session 对象?这可能吗?

到目前为止,我的一个想法是修改所有其他 Dao 类扩展的 BaseDao 类,以便在队列版本中静态分配它,不引用 session 对象,而在 JSF 版本中注入(inject) session 对象并在其中使用用户 ID。但我宁愿不必这样做 - 因此我的问题。

提前致谢。

最佳答案

(假设 session 指的是 HttpSession)

依赖关系应该只有一种方式。让数据访问层依赖于特定于 Web 层的东西似乎是一件坏事。这是一件坏事,因为它限制了您想要实现的重用类型。

HttpSession 只能在 Web 层引用。通过从 DAO 中删除 session 并让 JSF 代码显式传递用户 ID 来消除这种依赖性。

一旦解决了这个问题,那么您的通用 DAO 应该接受用户 ID 作为参数,并且不会有任何问题。

关于java - 支持无状态和有状态使用的 JPA 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58661450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com