JPA Eclipselink: как найти, какая связь вызывает ошибку - PullRequest
5 голосов
/ 13 января 2010

При попытке сохранить объект появляется следующая ошибка:

java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST

Есть ли какой-нибудь простой способ узнать, какое отношение имеет проблемный объект?

Возможно, что постоянный объект имеет много связей и проб и ошибок или может быть найден с помощью работ по удалению, но я хотел бы знать, существует ли более простой и быстрый способ идентификации объекта проблемных отношений.

Обновление: я периодически сталкиваюсь с этой проблемой, и мне всегда удавалось найти источник проблемы или я мог переупорядочить операции, чтобы решить проблему, но моя проблема - количество времени, в течение которого она требуется, чтобы найти оскорбительный объект.

Мои решения всегда были найдены методом проб и ошибок. Иногда я нахожу решение за считанные минуты, но иногда это занимает часы. Мой вопрос: есть ли более простой способ выяснить, какое из множества возможных отношений вызывает проблему. Исключение только утверждает, что «новый объект» был найден через «отношение», это не помогает мне найти какой объект или какое отношение. Есть ли журнал или способ сообщить системе более конкретную ошибку?

Ответы [ 3 ]

1 голос
/ 22 декабря 2016

Далее идет прослушиватель для всех запросов вашего приложения, чтобы активировать его:

  1. В вашем persistence.xml добавьте:

    <property name="eclipselink.session.customizer" value="dz.bilelovitch.QueryListener"/>
    
  2. Создать QueryListener:

    import org.eclipse.persistence.config.SessionCustomizer; 
    import org.eclipse.persistence.sessions.Session;
    
    public class QueryListener implements SessionCustomizer {
    
        @Override
        public void customize(Session aSession) throws Exception {
            System.out.println("log " + aSession.getLog() );
        }
    
0 голосов
/ 07 октября 2013

Ответ прост: отладка и тестирование. JUnit / TestNG и режим отладки должны быть вашими друзьями. В этой ошибке нет ничего особенного.

Кроме того, Cascade.PERSIST может отсутствовать, поэтому вы получаете это исключение. Дополнительная информация: http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Cascading

0 голосов
/ 26 апреля 2012
<property name="eclipselink.logging.level" value="FINEST"/>

заставит EclipseLink показывать более подробные журналы, которые помогут вам более точно определить причину ошибки.

...