[framework] 2012-08-22 19:50:30,984 - org.hibernate.tool.hbm2ddl.TableMetadata -796 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - indexes: [primary]
[framework] 2012-08-22 19:50:30,984 - org.hibernate.tool.hbm2ddl.SchemaUpdate -796 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - schema update complete
Exception in thread "main" org.hibernate.PersistentObjectException: detached entity passed to persist: com.cn.co.Users
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:613)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:587)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:591)
at com.cn.test.TestHibernate.main(TestHibernate.java:37)

解决方案 »

  1.   

    原因分析: 1。保存第一个的时候已经赋值了id,因为配置了hibernate主键生成策略,主键就不能手动设置了,一旦不为空或者0就被认为是已经保存到了数据库中,导致第二次保存是异常。因为保存的对象不是新new出来的。 2。原因就是我action的作用域设置错误了,我采用了默认单例的设置,对于Action来说必须采用prototype(每次调用创建一个对象)的作用域。 解决办法:在Action上就一个注解@Scope("prototype");

    <bean id="assetAction" class="com.servicezone.itsd.asset.webapp.action.AssetAction" scope="prototype">