Mapping Oracle XMLType on JPA (EclipseLink)

孤者浪人 提交于 2019-12-03 20:16:17

问题


We have a project with some special requirements, one of wich is getting data from a XMLType database column from an Oracle 10g database.

We have found an easy solution using JDBC, but it would drive the application a little messy, as all the data access is being done through JPA (the implementation used is EclipseLink).

We have done some research, and have found some solutions, as using Converters and other auxiliar types, but the implementations seemed a little complicated.

So, my question is:
Could you recommend me an easy way to map an XMLType data column to a Java Object type, using JPA?

Thanks in advance.


回答1:


Did you try just mapping it as a String?

In EclipseLink you can also map it using a DirectToXMLTypeMapping using a DescriptorCustomizer (no annotation support yet), or using the Converter as you have done.




回答2:


I think that it would be fine to share the full solution resulting from James' answer.

First, create a DescriptorCustomizer implmentation:

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);
    }

}

Then, all you have to do is use the @Customizer anotation on the entity, for the EntityManager to make use of it when handling the property called xmlField (as seen at the previous code snippet):

@Entity
@Table(name="TABLE_NAME")
@NamedQueries({ /* ... */})
@Customizer(XMLDataCustomizer.class)
public class DataEntity implements Serializable {
   /* ... */

   private String xmlField;

   /* .... */ 
}

The xmlField attribute does not need @Column anotation, as it's mapping is defined at our DescriptorCustomizer implementation.

And there is it.



来源:https://stackoverflow.com/questions/3961237/mapping-oracle-xmltype-on-jpa-eclipselink

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!