使用JPA持久化第三方对象

8

在我的当前项目中,我正在使用一个没有JPA注释的第三方库。

如何使用JPA和外部映射持久化来自该库的对象?

3个回答

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>

请注意,在指定<package>时,您无需使用完全限定名称。
如果您想要一个不同于orm.xml的文件名,在您的persistence.xml中通过以下方式进行指定:
<mapping-file>customMappingFile.xml</mapping-file>

谢谢你的建议。你知道是否有一种生成器可以分析类文件并输出映射关系的吗?手动完成是可行的,但对于一个相当大的域来说,这听起来像是不必要的手动工作。叫我懒,但我喜欢自动化任何我能自动化的东西;-) - er4z0r
嗯... PK是如何“发现”的?我认为你需要在某个地方定义<id> - Pascal Thivent
@Pascal Thivent 是的,谢谢。我目前正在使用<embeddable>,所以我错过了它。已更新。 - Bozho

1

1
谢谢。我目前正在使用Hibernate,会查看他们的文档。只是想到,既然JPA是一种标准的持久化机制,应该有一些与提供程序无关的教程在某个地方漂浮着。 - er4z0r
DN文档通常与提供程序无关,并且总是在某些内容是扩展时添加“DataNucleus扩展”。 - DataNucleus

1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接