hibernate 联级的问题

来源:互联网 发布:微信开发入门教程 php 编辑:程序博客网 时间:2024/06/05 09:53

org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: zzuli.bysj.wh.entity.UserLog; nested exception is org.hibernate.TransientObjectException: object ref 

2011-04-30 09:46:03|  分类:hibernate |  标签:save the  transient  instance  before  |举报|字号订阅

org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: zzuli.bysj.wh.entity.UserLog; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: zzuli.bysj.wh.entity.UserLog
    org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:633)
    org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
    org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:377)
    org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:632)
    zzuli.bysj.wh.manger.impl.UserManagerImpl.saveUser(UserManagerImpl.java:11)
    zzuli.bysj.wh.service.impl.UserServiceImpl.saveUser(UserServiceImpl.java:22)
    zzuli.bysj.wh.action.RegisterAction.execute(RegisterAction.java:111)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)


root cause

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: zzuli.bysj.wh.entity.UserLog
    org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
    org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
    org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:78)
    org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:755)
    org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1143)
    org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:26)
    org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:145)
    org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
    org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)
    org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:632)
    zzuli.bysj.wh.manger.impl.UserManagerImpl.saveUser(UserManagerImpl.java:11)
    zzuli.bysj.wh.service.impl.UserServiceImpl.saveUser(UserServiceImpl.java:22)
    zzuli.bysj.wh.action.RegisterAction.execute(RegisterAction.java:111)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)


解决办法:
在级联保存的时候会出现上面的问题。在一的一段添加default-cascade="save-update"
如:<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-cascade="save-update">
    <class name="zzuli.bysj.wh.entity.User" table="users">
        <id name="userId" column="userId">
            <generator class="assigned"></generator>
        </id>

        <property name="name1" type="string" column="name1"
            length="50" not-null="true">
        </property>
        <property name="name2" type="string" column="name2"
            length="50" not-null="true">
        </property>
        <property name="password" type="string" column="password"
            length="50" not-null="true">
        </property>
        <property name="age" type="java.lang.Integer" column="age">
        </property>
        <property name="birthday" type="string" column="birthday"
            length="10">
        </property>
        <property name="iamge" type="string" column="iamges"
            length="30">
        </property>
        <property name="tel" type="string" column="tel"
            length="11">
        </property>
        <property name="address" type="string" column="address"
            length="30">
        </property>
        <property name="sex" type="string" column="sex"
            length="2">
        </property>
        <property name="regTime" type="string" column="regTime"
            length="10">
        </property>
        <property name="logTime" type="string" column="logTime"
            length="10">
        </property>
        <property name="score" type="java.lang.Integer" column="score"
            length="5">
        </property>
        <property name="level" type="string" column="level"
            length="5">
        </property>
        <property name="logout" type="string" column="logout">
        </property>
        <property name="scoreTime" type="string" column="scoreTime"
            length="10">
        </property>
        <set name="userLog" inverse="false">
            <key column="userId"></key>
            <one-to-many class="zzuli.bysj.wh.entity.UserLog"/>
        </set>
        <set name="article">
            <key column="userId"></key>
            <one-to-many class="zzuli.bysj.wh.entity.Article"/>
        </set>
        <set name="document">
            <key column="userId"></key>
            <one-to-many class="zzuli.bysj.wh.entity.Document"/>
        </set>
        <property name="text1" type="string" column="text1"
            length="20">
        </property>
        <property name="text2" type="string" column="text2"
            length="20">
        </property>

    </class>
</hibernate-mapping>
0 0
原创粉丝点击