【问题标题】:Persisting 3rd party objects with JPA使用 JPA 持久化 3rd 方对象
【发布时间】:2011-01-19 08:54:02
【问题描述】:

在我当前的项目中,我使用的是没有 JPA 注释的第 3 方库。

如何使用 JPA 和外部映射保存该库中的对象?

【问题讨论】:

    标签: java jpa persistence


    【解决方案1】:

    检查thisthis。简而言之:

    1. 创建META-INF/orm.xml
    2. 关注(阅读).xsd

    您不必手动映射每一列 - 只需要一些细节(即集合和 id)。所有字段都假定为列(如果已映射类)。如果没有集合,这样就足够了:

    <?xml version="1.0" encoding="UTF-8" ?>
    <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm 
        http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
        version="1.0">
    
        <description>External entities from library X</description>
        <package>com.external.library</package>
        <entity class="SomeClassName">
          <id>..</id>
        </entity>
        <entity class="AnotherClassName">
          <id>..</id>
        </entity>
    </entity-mapping>
    

    请注意,在指定 &lt;package&gt; 时,您不需要完全限定名称。

    如果您想要一个不同于 orm.xml 的文件,请在您的 persistence.xml 中通过以下方式指定它:

    <mapping-file>customMappingFile.xml</mapping-file>
    

    【讨论】:

    • 感谢您的提示。您是否碰巧知道,如果这些映射有某种生成器,可以分析类文件并吐出映射。手动完成是可能的,但对于一个相当大的领域来说,这听起来像是不必要的手动工作。叫我懒惰,但我喜欢尽可能自动化;-)
    • 嗯...PK是如何“被发现”的?我认为您需要在某处定义&lt;id&gt;
    • @Pascal Thivent 是的,谢谢。我目前正在与&lt;embeddable&gt; 一起使用它,所以我错过了它。已更新。
    【解决方案2】:

    请参阅您的 JPA 实现文档;任何严肃的 JPA 实现都应该提供使用 XML 和注释的示例。看 http://www.datanucleus.org/products/accessplatform_2_0/jpa/metadata_xml.html 对于 XML 结构的 DataNucleus 文档,然后参考特定的关系类型以获取不同功能的示例。

    【讨论】:

    • 谢谢。我目前正在使用休眠,并将查看他们的文档。只是想,由于 JPA 是一种标准的持久性机制,因此应该有一些与提供者无关的教程在某处浮动。
    • DN 文档通常与提供者无关,并且总是在扩展的地方添加“DataNucleus 扩展”。
    【解决方案3】:

    正如所指出的,您可以使用 JPA mapping file 而不是注释来映射非注释实体(例如来自第三方库的类)。按照任何基于映射文件的 JPA 教程开始。

    关于自动化,我不认为您可以从对象模型自动生成orm.xml(与物理模型相反,对象模型不包含足够的信息,例如哪个字段是 PK 或,对于双向关联,哪一方是所有者等,因此需要元数据)。但大多数 IDE 对此提供支持,例如Eclipse

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 2017-10-10
      • 2012-01-17
      • 2014-06-11
      • 1970-01-01
      • 2011-11-28
      • 2012-10-24
      相关资源
      最近更新 更多