весенняя проблема eclipselink с IntegrityException - PullRequest
0 голосов
/ 09 июня 2011

Я пытаюсь использовать spring с eclipseLink, и у меня есть исключение IntegrityException. Это моя конфигурация:

<?xml version="1.0" encoding="UTF-8"?>

xsi:schemaLocation="http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<import resource="data-source.xml" />

<tx:annotation-driven mode="proxy"
    transaction-manager="transactionManager" />

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
    p:entityManagerFactory-ref="entityManagerFactory" />

<!-- Entity manager -->
<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="unit1" />
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/>
    </property>
    <property name="jpaVendorAdapter">
        <bean
            class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
            <property name="databasePlatform" value="org.eclipse.persistence.platform.database.DerbyPlatform" />
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
        </bean>
        <!-- <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> -->
        <!-- <property name="databasePlatform" value="org.hibernate.dialect.DerbyDialect" 
            /> -->
        <!-- <property name="showSql" value="true" /> -->
        <!-- <property name="generateDdl" value="true" /> -->
        <!-- </bean> -->
    </property>
</bean>

<bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

и точно исключение:

[EL Config]: 2011-06-09 00: 15: 24.061 - ServerSession (2050312009) - Соединение (473155160) - Поток (Поток [основной, 5, основной]) - Подключен: jdbc: derby : // локальный: 1527 / springhib, создать = верно Пользователь: приложение База данных: Apache Derby Версия: 10.6.2.1 - (999685) Драйвер: Apache Derby Network Client JDBC Версия драйвера: 10.7.1.1 - (1040133) [EL Severe]: 2011-06-09 00: 15: 24.127 - ServerSession (2050312009) - Поток (Поток [основной, 5, основной]) - Стек локальных исключений: Исключение [EclipseLink-0] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.IntegrityException Исключения дескриптора:

Исключение [EclipseLink-148] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DescriptorException Описание исключения: Политика контейнера [CollectionContainerPolicy (класс org.eclipse.persistence.indirection.IndirectSet)] не совместима с прозрачной косвенной ссылкой. Отображение: org.eclipse.persistence.mappings.ManyToManyMapping [комментарии] Дескриптор: RelationalDescriptor (pl.adaknet.hibspring.domain.ArtEntity -> [DatabaseTable (ARTENTITY)])

но у меня нет этой проблемы, когда я использую другого Продавца

org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter

есть идеи?

Ответы [ 3 ]

2 голосов
/ 11 июня 2011

Попробуйте использовать эту реализацию loadtimeweaver:

package net.palesz.util;

import org.springframework.instrument.classloading.SimpleLoadTimeWeaver;

public class JpaAwareLoadTimeWeaver extends SimpleLoadTimeWeaver {
    @Override
    public ClassLoader getInstrumentableClassLoader() {
        ClassLoader instrumentableClassLoader = super.getInstrumentableClassLoader();
        if (instrumentableClassLoader.getClass().getName().endsWith("SimpleInstrumentableClassLoader")) {
            return instrumentableClassLoader.getParent();
        } else {
            return instrumentableClassLoader;
        }
    }
}

Конфигурация Spring context.xml:

<bean id="loadTimeWeaver" class="net.palesz.util.JpaAwareLoadTimeWeaver" />
0 голосов
/ 18 февраля 2014

вы должны использовать агент для динамического плетения
-javaagent: весна-агент-2.5.6.jar
я пробовал использовать агент eclipseLink, но он не работал.

больше информации о ткачестве для JPA на весну:
http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch14s06.html
если вы хотите запустить свой код на tomcat:
http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch14s06.html#orm-jpa-setup-lcemfb-tomcat

0 голосов
/ 09 июня 2011

Странная ошибка, поскольку IndirectSet действителен. Кажется, это проблема загрузчика классов, но я не видел этого весной.

Это может быть связано с использованием вами loadTimeWeaver, поэтому вы можете попробовать удалить это.

В какой среде вы работаете в Spring?

...