我就是做了一对多和多对一的双向关联,我关联查询的时候会报错。这个异常我搜过的。但是还是没有解决问题。异常如下:
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对象没有持久就保存。
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对象没有持久就保存。
解决方案 »
- struts2的OGNL表达式还是JSTL标签?
- java数据验证时性能问题???
- 如何查询一个指定日期的数据?
- extjs是如何从struts2中的action中取值的?
- System.getProperty的问题
- 求一实例(用JAVA+IBATIS+VELOCITY做一个通过调用页面模版自动生成页面!)有实例者给200分都行!
- 用ClassPathXmlApplicationContext读取Spring配置文件的路径设置问题!
- 请教怎么解决这个问题
- 怎么写一个简单的论坛?
- EJB问题,欢迎讨论及指教
- Ext.Ajax.request中callback函数的使用?
- Struts2整合JasperReport错误
<key column="user_id"/>
<one-to-many class="Article" />
</bag>
我建立的SQL语句:
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`TITLE` varchar(255) DEFAULT NULL,
`CONTENT` varchar(255) DEFAULT NULL,
`CREATE_DATE` datetime DEFAULT NULL,
`user_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `FKD458CCF6617371DA` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;#
# Dumping data for table article
#
/*!40000 ALTER TABLE `article` DISABLE KEYS */;/*!40000 ALTER TABLE `article` ENABLE KEYS */;#
# Table structure for table user
#
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`NAME` varchar(20) DEFAULT NULL,
`PASSWORD` varchar(20) DEFAULT NULL,
`EMAIL` varchar(255) DEFAULT NULL,
`PHONE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/**
* 进入编辑文章控制器
* @return
*/
@RequestMapping(value="/system/editArticle.do",method=RequestMethod.GET)
public String setEditArticle(Long articleId,ModelMap model){
Article articleEdit=articleManager.get(articleId);
model.addAttribute("articleEdit", articleEdit);
return "editArticle";
}
/**
* 提交编辑文章控制器
* @return
*/
@RequestMapping(value="/system/editArticle.do",method=RequestMethod.POST)
public String editArticle(@ModelAttribute Article articleEdit,ModelMap model,SessionStatus status){
articleEdit.setCreateDate(new Date());
articleManager.update(articleEdit);
status.setComplete();
return "redirect:/system/index.do";
}做了annotation的配置的:@SessionAttributes("articleEdit")
es: object references an unsaved transient instance - save the transient instance before flushing: com.yy.entity.Orgnization
object references an unsaved transient instance - save the transient instance before flushing: com.yy.entity.Orgnization; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.yy.entity.OrgnizationFile: org/hibernate/engine/ForeignKeys.java
Line number: 243
Stacktraces
org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.yy.entity.Orgnization; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.yy.entity.Orgnization org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:654)
org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:793)
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:664)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
$Proxy14.save(Unknown Source)
com.yy.action.OrgAction.save(OrgAction.java:101)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
int rid = roleService.findByRname(rname).get(0).getRid();
然后再把该ID用set给role
即role.setRid(rid);
运行,就OK了
如果又不想级联删除,怎么办哇好吧,可以用hibernate的Cascade
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
...
@Cascade({CascadeType.SAVE_UPDATE})