JPA Eclipselink:如何找到导致错误的关系

时间:2010-01-13 20:04:41

标签: jpa eclipselink

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

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

有没有简单的方法来判断哪个关系有问题对象?

持久化对象可能有许多关系和试错,或通过淘汰工作找到,但我想知道是否有更简单快捷的方法来识别问题关系对象。

更新:我定期遇到这个问题,我一直能够找到问题的根源,或者已经能够重新排序操作以解决问题,但我的问题是它的时间量找到有问题的对象。

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

3 个答案:

答案 0 :(得分:0)

接下来是您的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() );
        }
    

答案 1 :(得分:-1)

<property name="eclipselink.logging.level" value="FINEST"/>

将使EclipseLink显示更详细的日志,这些日志可以帮助您更密切地检测错误原因。

答案 2 :(得分:-1)

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

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