为什么具有JAXB对象的字段不被OpenJPA识别为持久状态?

时间:2013-09-03 11:35:50

标签: java openjpa

我想在拥有实体的表中的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识别为持久状态?

1 个答案:

答案 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。在此期间,我再次构建并运行应用程序,它突然起作用。