gpt4 book ai didi

java - JPA - DAO 层中的延迟初始化

转载 作者:行者123 更新时间:2023-11-30 07:05:51 29 4
gpt4 key购买 nike

我对 JPA 和多层架构编码方式不熟悉。我目前正在开发一个新项目,我们正在制作一个 API,其中 DAO 层用于使用 JPQL 与数据库进行通信。

目前,我已经编写了 JPQL 语句来从数据库获取数据。除此之外,我还执行延迟初始化来检索复杂对象。我想知道在 DAO 层执行延迟初始化是否是正确的方法。

在 DAO 层之前还有 2 个层,称为引擎层和 EJB 层,其中数据库连接处于 Activity 状态,并且也可以在那里执行延迟初始化。我想知道这样做是否是一种很好的架构方法,因为我希望与内容相关的数据库仅位于 DAO 层中。

但是,我再次陷入了这样一个境地:我争论自己说为什么在 EJB/Engine 层中执行延迟初始化不是一个好方法,因为我有 Activity 的数据库连接来执行数据库操作。我之所以这么想,是因为我只能在DAO层中检索必要的数据,这些数据可以被重用,并且可以根据不同类的需要执行延迟初始化。

我不确定为什么我在引擎和 EJB 层中激活了数据库连接(我希望这是为了事务管理)。它发现它是按照架构师的建议完成的,其中我将 EJB 定义为无状态,并且引擎级类在其范围内具有数据库连接。

很抱歉问了一个冗长的问题。希望我已经提供了回答问题所需的详细信息。

附注请向我推荐任何好书或文章,以帮助我确定哪一层负责理想地执行什么任务。

最佳答案

我想说在 DAO 中这样做是正确的做法。但创建一个单独的方法供共同使用。例如,如果您有一种获取部门的方法,例如

public List<Department> getDepartments() {
//get departments
//Also fetch employees in each department here // DON'T DO
}

如果有另一种特定的方法来获取所有实体并正确地使用 java 文档,那就太好了。

public List<Department> getDepartmentsWithEmployees() {
//get departments
//Also fetch employees in each department here
}

因此人们会根据需要调用正确的方法,从而减少出现任何性能问题的可能性。

注意:如果可能,请使用 Join Fetch。

关于java - JPA - DAO 层中的延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144497/

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