我想在拥有实体的表中的CLOB列中保留JAXB对象的XML。 OpenJPA使用其XMLValueHandler附带对此类构造的支持。
我跟随IBM的this tutorial。
我的示例代码是:
@Entity
@Access(AccessType.FIELD)
public class EntityContainingXml {
@Id
private Long id;
@Persistent
@Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
@Column(name = "xml")
@Lob
private SomeJaxbType xmlStuff;
//...
}
然而,OpenJPA增强器不会将字段xmlStuff
识别为持久状态。如果持久性单元中包含SomeJaxbType
,则不会进行更改。
我需要做什么才能使OpenJPA增强器将字段xmlStuff
识别为持久状态?
答案 0 :(得分:0)
由于maven依赖性,问题是类路径问题。我不能说究竟是什么导致了这个问题。原始类路径包含org.apache.openjpa工件openjpa-persistence-jdbc,openjpa-persistence,openjpa和openjpa-all的一些组合。这导致在构建时间增强期间使用org.apache.openjpa.persistence.PersistenceMetaDataFactory
。但是,此工厂创建的解析器org.apache.openjpa.persistence.AnnotationPersistenceMetaDataParser.AnnotationPersistenceMetaDataParser
无法识别@Strategy
。
现在只有openjpa-persistence-jdbc当前用作编译时依赖项。并且构建时间增强依赖于工件openjpa。
我通过maven构建调试来找到它。在我的情况下,无法使用配置属性openjpa.MetaDataFactory
来设置适当的元数据工厂,因为它导致了类转换异常。然后我开始抛弃OpenJPA。在此期间,我再次构建并运行应用程序,它突然起作用。