多J2EE应用程序系统中具有延迟字段的实体的最佳实践

时间:2011-08-28 17:56:49

标签: java java-ee jpa lazy-loading

我正在开发一个由部署在Oracle Weblogic服务器上的多个J2EE应用程序组成的系统,使用Toplink作为JPA提供程序。

在我的系统中,我有一个负责持久性的应用程序(它从DB读取和写入我的所有实体)。其他应用程序使用此应用程序访问数据库中的数据。

我还有一个拥有LOB字段的实体。使用此实体时,并不总是使用LOB字段。因此,我改变了实体,因此它会懒惰地获取LOB字段。

但是现在我遇到了一个问题:当我的一个应用程序从持久性应用程序读取此实体时,返回的实体是一个普通的POJO,与任何EntityManager分离,所以我无法读取LOB字段(它从来没有调用,因此永远不会被提取。)

我想也许我可以在持久性应用程序中添加一个方法来完全获取实体(或者使用布尔参数获取相同的方法),但是这会使持久性应用程序的接口过于具体(如果我有的话会怎样)该实体中有更多LOB字段?)。

你会做什么?在这种情况下,最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

使用DTO(数据传输对象) - 非实体但用于在应用程序/应用程序层之间传输数据的对象。

您可以自由决定何时使用哪个字段。例如:

class Service {
   LoblessResult getSimpleData(..);
   LobbedResult getCompleteData(..);
} 

其中LoblessResultLobbedResult是包含实体字段的不同子集的两个类。

如果唯一的区别是@Lob字段 - 则客户端应该发出第二个请求以获取该字段的值。你将只有一个DTO,它只有一个字段。