hibernate的一个问题:object references an unsaved transient instance - save the transient instance before
我就是做了一对多和多对一的双向关联,我关联查询的时候会报错。这个异常我搜过的。但是还是没有解决问题。异常如下:
21:57:42.218 [http-8080-1] DEBUG org.hibernate.jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
21:57:42.218 [http-8080-1] DEBUG o.h.transaction.JDBCTransaction - rollback
21:57:42.218 [http-8080-1] DEBUG o.h.transaction.JDBCTransaction - re-enabling autocommit
21:57:42.218 [http-8080-1] DEBUG o.h.transaction.JDBCTransaction - rolled back JDBC Connection
21:57:42.218 [http-8080-1] DEBUG org.hibernate.jdbc.ConnectionManager - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
21:57:42.218 [http-8080-1] DEBUG org.hibernate.impl.SessionImpl - disconnecting session
21:57:42.218 [http-8080-1] DEBUG org.hibernate.jdbc.ConnectionManager - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
21:57:42.218 [http-8080-1] DEBUG org.hibernate.jdbc.ConnectionManager - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
2009-4-24 21:57:42 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet xiaoyuBlog threw exception
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.blog.blog.domain.User
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:110)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1728)
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1699)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1589)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
下面是我的HBM配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="org.blog.blog.domain">
<class name="Article" table="article" dynamic-update="true" >
<id name="id">
<generator class="native"/>
</id>
<property name="title" column="TITLE"/>
<property name="content" column="CONTENT"/>
<property name="createDate" column="CREATE_DATE"></property>
<many-to-one name="createUser" class="User">
<column name="user_id" not-null="true"/>
</many-to-one>
</class>
</hibernate-mapping>
下一个是:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="org.blog.blog.domain">
<class name="User" table="user" dynamic-update="true" >
<id name="id">
<generator class="native"/>
</id>
<property name="name" column="NAME"/>
<property name="password" column="PASSWORD"/>
<property name="email" column="EMAIL"></property>
<property name="phone" column="PHONE"></property>
<bag name="articles" table="article" inverse="true" lazy="false" cascade="all">
<key column="user_id"/>
<one-to-many class="Article" />
</bag>
</class>
</hibernate-mapping>
我配置的文件,我WEB层调用的方法是:
User user=(User)request.getSession().getAttribute("user");
List<Article> articles=articleManager.findByProperty("createUser", user);
我提供了getter和setter方法的。但是总报这个错误。在这个地方也报:
User user=(User)request.getSession().getAttribute("user");
article.setCreateUser(user);
article.setCreateDate(new Date());
articleManager.save(article);
我很想彻底解决这个问题,它的意思就是麽有把对象持久,user对象没有持久就保存。