【问题标题】:What's the best way to deal with JAX-WS proxy objects for EJB JPA entities that are Lazy Loaded?为延迟加载的 EJB JPA 实体处理 JAX-WS 代理对象的最佳方式是什么?
【发布时间】:2013-03-15 15:00:25
【问题描述】:

不幸的是,我们被困在使用 JPA 1.0 和 Java EE 5(SAP 实现)。如果重要的话,我们使用的是 Oracle 数据库。

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

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

现在,我们尝试了几件事:-

首先,我们尝试了@Basic(fetch= FetchType.LAZY)。无论如何,这似乎没有任何作用。 (可能这不是强制执行的 JPA 协议)

其次,我们尝试与单独表中的字节数据建立一对一的关系,并将其设置为惰性获取类型。执行此操作时,Web 服务中会发生异常,因为此项的 Jax WS 代理对象几乎是空的。

第三,我们已经尝试过加载整个“文件”表,但是在数据库查询之后只清空字节[]数据;这不会通过 Web 服务返回大字节数据,但它并不理想,因为字节数据仍会从数据中检索到程序“上下文”中。

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

【问题讨论】:

    标签: java web-services jpa ejb jax-ws


    【解决方案1】:

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

    【讨论】:

    • 好的,那么为文件创建一个 DTO 吗?现在我们正在返回具有一对多文件(以及其他众多字段)的父实体。我们可能需要在 DTO 类的父对象中创建一个瞬态字段,以便返回所有必需的项目。所以绝对有可能这样做(如果我理解你所说的 jax-ws 类型的意思)。但是有没有更优雅的方法,不涉及污染父实体类(我们可以创建另一个 DTO 对象来保存实体类和文件类也返回)。
    • @Davos555 - 坦率地说,这就是为什么许多人主张将您的 DTO 与您的实体分开的原因。您选择的数据建模方式通常与您希望远程传输数据的方式不同(有时甚至是显着不同)。
    猜你喜欢
    • 2012-11-16
    • 2020-06-28
    • 2017-03-27
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多