【问题标题】:How can I support jpa database serialization of a class who's source code I don't own?如何支持我不拥有源代码的类的 jpa 数据库序列化?
【发布时间】:2019-07-02 19:13:34
【问题描述】:

如果我有一个实体想要持久化到 JPA2 中的数据库,我只需添加 @Entity 注释,以及任何其他指定其关系的注释,等等。

我有几个来自我不拥有的依赖项的类,我想这样做。我在想一些想法,但我对其中任何一个都不太满意。

  1. 创建一个“空”子类,将所有内容的调用委托给真正的类。空子类将是持有配置注释的子类。我不确定这是否可行,因为我认为您需要向超类添加注释。

  2. 使用属性转换器。如果我不关心使用我为关系导入的实体,这可以正常工作。我现在已经为一些枚举这样做了。

  3. 我想我可以用persistence.xml 配置它?但我想不惜一切代价避免这种情况。

再举一个我正在尝试做的例子,在 Spring 中,您通常通过将 @Componeont 放在它们上来配置 bean,并使用其他 JPA 注释装饰类。但是,如果您不拥有该类,那么 Spring 有一个带有 @Bean 注释的简单机制,您可以在其中创建和配置类,该方法在 @Configuration 类调用以获取对该实体的引用的方法内。这样您就可以将第三方库用作 bean,而无需访问源代码。

【问题讨论】:

  • 这是如何获得“太宽泛”的票数的。这是一个非常具体的问题,关于如何处理 JPA2 似乎不太支持的案例,因为它完全由注释驱动。

标签: java jpa-2.0


【解决方案1】:

我最终使用 orm.xml 将 JPA 映射到我不控制其源代码的 java 类。

【讨论】:

    【解决方案2】:

    首先,无论您是否拥有要持久化的类,都不应使用@Entity 注释您的业务实体。这背后的原因很简单:数据库是一个 I/O 通道。 I/O 通道是一个细节。您的业​​务逻辑应该独立于细节。

    您应该将业务实体映射到 DTO,然后将其传递给 DAO,DAO 然后将其映射到数据库实体并持久化。不要相信我,this opinion actually stems from uncle Bob

    所以答案是:将实体转换为 DTO,将此 DTO 传递给相应的 DAO,DAO 将其再次转换为某个数据库对象并持久化。

    【讨论】:

    • 每个人对此都有自己的看法。我认为 DTA 和 DTO 是 JEE 地狱遗留下来的垃圾数据模式。我还使用开放的实体管理器,因为某种原因它已被声明为“反模式”。哦,天哪,我的交易在序列化期间保持打开的时间稍长一些。有人得到蒸汽,我昏倒了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多