Log4j+;OpenJPA=NoClassDefFoundError:javax/persistence/AttributeConverter

Log4j+;OpenJPA=NoClassDefFoundError:javax/persistence/AttributeConverter,java,hibernate,jpa,logging,log4j,Java,Hibernate,Jpa,Logging,Log4j,我正在尝试让log4j(我也很乐意使用任何日志api作为日志,因为它是jpa持久的)使用jpa appender 我的persistence.xml如下所示 <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider&g

我正在尝试让log4j(我也很乐意使用任何日志api作为日志,因为它是jpa持久的)使用jpa appender

我的persistence.xml如下所示

<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>org.apache.camel.processor.interceptor.jpa.JpaTraceEventMessage</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextMapAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextMapJsonAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextStackAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextStackJsonAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.MarkerAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.MessageAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.StackTraceElementAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ThrowableAttributeConverter</class>
    <class>com.xxxxxx.lab.logging.ReportEntity</class>
    <properties>
        <property name="openjpa.jdbc.DBDictionary" value="org.apache.openjpa.jdbc.sql.HSQLDictionary"/>
        <!-- value="buildSchema" to runtime forward map the DDL SQL; value="validate" makes no changes to the database -->
        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
        <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>
    </properties>
</persistence-unit>

AttributeConverter在JPA2.1中似乎是新的。您确定您的项目使用的是JPA2.1而不是以前的版本吗


只是好奇,为什么你如此坚持使用JPA来实现日志持久性?有很多基于JDBC的解决方案运行良好。我看不出有任何理由使用JPA解决方案,除非您打算在应用程序中使用与日志记录相关的实体。

您是否使用了转换器?您使用的是哪一个JPA版本?是JPA2.1吗?org.apache.openjpa2.2。到目前为止,我只有持久性配置(如图所示)和一个实体类ReportEntity扩展BasicLogEventEntity,没有显式转换org.apache.openjpa v2.2.2。因为我的整个项目都在JPA下,我希望有一个用于记录perposes的编辑持久性单元,OpenJPA2.2.2是“JSR-317JavaPersistence2.0规范的兼容实现”。因此,我认为它不符合JPA2.1。而且,尽管您的项目是在JPA下进行的,但如果您不打算在项目中使用与日志相关的实体,那么使用JPA persistence for log仍然是毫无意义的(事实上,我会说,这是一个错误的选择,因为会产生额外的开销)
java.lang.NoClassDefFoundError: javax/persistence/AttributeConverter