Java 在JPA上映射Oracle XMLType(EclipseLink)
我们有一个有一些特殊要求的项目,其中之一是从Oracle 10g数据库的XMLType数据库列获取数据 我们已经找到了一个使用JDBC的简单解决方案,但是它会让应用程序有点混乱,因为所有的数据访问都是通过JPA完成的(使用的实现是EclipseLink) 我们做了一些研究,并找到了一些解决方案,比如使用转换器和其他辅助类型,但实现似乎有点复杂 所以,我的问题是:Java 在JPA上映射Oracle XMLType(EclipseLink),java,jpa,eclipselink,xmltype,Java,Jpa,Eclipselink,Xmltype,我们有一个有一些特殊要求的项目,其中之一是从Oracle 10g数据库的XMLType数据库列获取数据 我们已经找到了一个使用JDBC的简单解决方案,但是它会让应用程序有点混乱,因为所有的数据访问都是通过JPA完成的(使用的实现是EclipseLink) 我们做了一些研究,并找到了一些解决方案,比如使用转换器和其他辅助类型,但实现似乎有点复杂 所以,我的问题是: 您能推荐一种使用JPA将XMLType数据列映射到Java对象类型的简单方法吗 提前感谢。您是否尝试将其映射为字符串 在Eclipse
您能推荐一种使用JPA将XMLType数据列映射到Java对象类型的简单方法吗
提前感谢。您是否尝试将其映射为字符串
在EclipseLink中,您还可以使用DirectToXMLTypeMapping和DescriptorUserMizer(目前还不支持注释)对其进行映射,或者像您所做的那样使用转换器进行映射。我认为,分享James的答案所产生的完整解决方案是很好的 首先,创建一个
descriptorrcustomizer
实现:
import org.eclipse.persistence.config.DescriptorCustomizer;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.mappings.xdb.DirectToXMLTypeMapping;
public class XMLDataCustomizer implements DescriptorCustomizer {
public void customize(final ClassDescriptor descriptor) throws Exception {
descriptor.removeMappingForAttributeName("xmlField");
DirectToXMLTypeMapping mapping = new DirectToXMLTypeMapping();
mapping.setAttributeName("xmlField"); //name of the atribute on the Entity Bean
mapping.setFieldName("XML_COLUMN"); //name of the data base column
descriptor.addMapping(mapping);
}
}
然后,您所要做的就是在实体上使用@Customizer
选项,以便EntityManager
在处理名为xmlField
的属性时使用它(如前面的代码片段所示):
xmlField
属性不需要@Column
anotation,因为它的映射是在我们的描述符配置器
实现中定义的
就在这里。谢谢你的回答。目前,我的同事选择将其映射为字符串,并从数据库中获取CLOB类型的列。但我仍然想知道是否有一种更直接的方法可以在Java层实现它。我将检查您的解决方案。最后,尽管我认为这是实现它的正确方法,但我们将继续进行Clob解决方案。无论如何谢谢@James.那么这个方法给你带来了什么?xmlField在java世界中仍然是一个字符串??
@Entity
@Table(name="TABLE_NAME")
@NamedQueries({ /* ... */})
@Customizer(XMLDataCustomizer.class)
public class DataEntity implements Serializable {
/* ... */
private String xmlField;
/* .... */
}