5

尝试持久化对象时出现以下错误:

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

有什么简单的方法可以判断哪个关系有问题对象?

持久化对象可能有许多关系,并且反复试验或通过消除找到工作,但我想知道是否有更简单更快的方法来识别问题关系对象。

更新:我定期遇到这个问题,并且我一直能够找到问题的根源,或者能够重新排序操作以解决问题,但我的问题是查找所需的时间冒犯的对象。

我的解决方案总是通过反复试验找到的。我有时会在几分钟内找到解决方案,但有时需要几个小时。我的问题是:有没有更简单的方法来找出可能是许多关系中的哪一个导致了问题。该例外仅声称通过“关系”找到了“新对象”,这无助于我找到哪个对象或哪个关系。是否有日志或方法告诉系统提供更具体的错误?

4

3 回答 3

1

接下来是一个监听你APP所有请求的监听器,激活它:

  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() );
        }
    
于 2016-12-22T18:51:24.203 回答
-1

答案很简单:调试和测试。JUnit/TestNG 和调试模式应该是你的朋友。这个错误没有什么特别的。

此外, Cascade.PERSIST 可能会丢失,因此您会遇到该异常。
更多信息:http ://en.wikibooks.org/wiki/Java_Persistence/Relationships#Cascading

于 2013-10-07T06:09:23.370 回答
-1
<property name="eclipselink.logging.level" value="FINEST"/>

将导致 EclipseLink 显示更详细的日志,这可以帮助您更仔细地检测错误原因。

于 2012-04-26T10:38:17.020 回答