我正在尝试使用Websphere Liberty中的JPA保存和检索数据库行。 数据库引擎是DB2,该表具有XML数据类型列,并且此列在JPA中映射为String。 这在OpenJpa中运行良好,但转移到EclipseLink会导致检索到null String。请注意,保存操作效果很好,只有在读取操作期间才存在问题。
@Entity
@Table(name="DATASET")
@NamedQueries( {
@NamedQuery(name = "DataSet.findByNameId", query = "SELECT ds FROM DataSet AS ds WHERE ds.name = :name")
})
public class DataSet implements Serializable {
...
@Column(name="DATASETDEF", unique=false, nullable=true)
private String datasetDef;
public static DataSet findByName(EntityManager em, String datasetName) {
Query q = em.createNamedQuery("DataSet.findByNameId");
q.setParameter("name", datasetName);
DataSet dataset = (DataSet)q.getSingleResult();
System.out.println("-->" + dataset.getDatasetDef()); // <-- THIS IS NULL
return dataset;
}
我激活了EclipseLink日志,并且正确执行了查询,包括XML字段:
eclipselink I CWWJP9990I: EclipseLink, version: Eclipse Persistence Services - 2.6.3.WAS- v20160817-8475a53
eclipselink.sql 3 SELECT DATASETID, DATASETDEF, DESCRIPTION, NAME, UPDATEFREQUENCY FROM UCC.DATASET WHERE (NAME = ?)
bind => [VEHICLE]
SystemOut O -->null
我发现使用Postgresql也会出现类似的问题:
Using EclipseLink JPA to store XML type to PostgreSQL或使用Oracle:Mapping Oracle XMLType on JPA (EclipseLink)
处理这个问题的正确方法是什么?