多j2ee应用程序系统中具有惰性字段的实体的最佳实践



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

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

我还有一个保存LOB字段的实体。在使用此实体时,并不总是使用LOB字段。因此,我修改了实体,使其能够惰性地获取LOB字段。

但是现在我有一个问题:当我的一个应用程序从持久化应用程序读取这个实体时,返回的实体是一个普通的POJO,与任何EntityManager分离,所以我不能读取LOB字段(它从未被调用,因此从未被获取)。

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

你会怎么做?这种情况下的最佳实践是什么?

使用dto(数据传输对象)——不是实体,但用于在应用程序/应用层之间传输数据的对象。

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

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

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

如果唯一的区别是@Lob字段-那么客户端应该发出第二次请求来获取该字段的值。您将只有一个DTO,它具有除一个字段外的所有字段。

最新更新