Я думаю, что было бы хорошо поделиться полным решением, полученным в результате ответа Джеймса.
Сначала создайте DescriptorCustomizer
имплементацию:
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
(как показано в предыдущем фрагменте кода):
@Entity
@Table(name="TABLE_NAME")
@NamedQueries({ /* ... */})
@Customizer(XMLDataCustomizer.class)
public class DataEntity implements Serializable {
/* ... */
private String xmlField;
/* .... */
}
Атрибут xmlField
не нуждается в аннотации @Column
, так как его отображение определено в нашей реализации DescriptorCustomizer
.
И вот оно.