1

我想将 JAXB 对象的 XML 保存在拥有实体表的 CLOB 列中。OpenJPA 使用其XMLValueHandler支持此类构造。

我遵循了 IBM 的这个教程

我的示例代码是:

@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;
    //...
}

但是,xmlStuffOpenJPA 增强器不会将该字段识别为持久状态。SomeJaxbType如果包含在持久性单元中,则不会进行更改。

我需要做什么才能让 OpenJPA 增强器将该字段识别xmlStuff为持久状态?

4

1 回答 1

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

于 2013-09-04T11:00:57.537 回答