2013-03-15 30 views
0

不幸的是我们被卡住了,使用JPA 1.0和Java EE 5(SAP实现)。如果重要,我们正在使用Oracle数据库。处理Lazy Loaded加载的EJB JPA实体的JAX-WS代理对象的最佳方式是什么?

我们有一个实体类,它基本上是一个文件类型对象的数据库描述,包含名称,文件类型和一个byte [](blob)项。

当在表上调用查找时,我们不希望每次都急于加载blob对象,并通过web服务返回它,但是我们仍然希望加载文件名和类型字段。

现在,我们已经试过几件事情: -

首先,我们已经试过@Basic(fetch= FetchType.LAZY)。无论如何,这似乎并没有做任何事情。 (可能这不是强制的JPA协议)

其次,我们试图与单独的表中的字节数据建立一对一关系,并将其设置为惰性获取类型。当这样做时,这是在Web服务中发生异常时,因为这个项目的Jax WS代理对象几乎是空的。第三,我们尝试了急切地加载整个“文件”表,但是在数据库查询之后仅删去了字节[]数据;这不会通过Web服务返回大字节数据,但它并不理想,因为字节数据仍然从数据检索到程序“上下文”中。

那么有没有办法告诉Jax WS忽略特定的字段,如果代理对象是空的?我似乎无法在文档中找到任何内容?

回答

1

为什么不只是创建一个单独的jax-ws类型,比如只包含名称和类型字段的“FileMetadata”?

+0

好的,为文件创建一个DTO?现在,我们正在返回具有一个到多个文件的父实体(以及其他许多字段)。我们可能需要在DTO类的父对象中创建一个瞬态字段,以便返回所有必需的项目。所以这样做肯定是可能的(如果我已经通过jax-ws类型理解了你的意思)。是否有更优雅的方式,不涉及污染父实体类(我们可以创建另一个DTO对象,持有实体类和文件类以返回)。 – Davos555 2013-03-15 15:17:24

+0

@ Davos555 - 坦率地说,这就是为什么很多人主张将你的DTO与实体分离。您如何选择对数据进行建模往往与您希望远程传输数据的方式有所不同 - 有时是显着的。 – jtahlborn 2013-03-15 16:32:56

相关问题