在我的项目中,有一个User类和一个Group类,两者的关系式1-N,user.hbm.xml配置文件中的many-to-one内容如下:<many-to-one name="group"
class="com.whir.model.Group"
column="groupid"
insert="true"
update="true"
cascade="none"
outer-join="auto"
/>
group.hbm.xml中one-to-many内容如下:
<set name="users"
schema="ezoffice"
lazy="true"
inverse="true"
table="t_user"
cascade="all"
sort="unsorted">
<key column="groupid"></key>
<one-to-many class="com.whir.model.User"/>
</set>
然后我在函数中保存group,在保存group的时候也想把user的一个对象保存到数据库中:函数代码如下:
DB db = new DB();
User u1 = new User();
u1.setUsername("default_u1");
u1.setPassword("default_u1pwd");
u1.setAge(23);
u1.setPhone("sdfsd");
u1.setSex("男");
u1.setRegisterdate(new Date(System.currentTimeMillis()));
Group group = new Group();
group.setGroupname("default_groupname");
group.setGroupdesc("default_groupdesc");
group.getUsers().add(u1);
u1.setGroup(group);
db.save(group);在运行的时候group能保存,但是u1没有保存,报错内容如下:[20/03/13 03:13:32:032 CST] ERROR impl.SessionImpl: Could not synchronize databa
se state with session
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row no
t found)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatche
r.java:25)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:688)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:641)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52
)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204)
at com.whir.util.DB.save(DB.java:16)
at com.whir.action.GroupAction.adddefault_group_user(GroupAction.java:13
3)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchActio
n.java:280)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:
216)
at org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:148
2)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run
(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecuri
tyHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav
a:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:56)
at com.whir.common.util.SetCharacterEncodingFilter.doFilter(SetCharacter
EncodingFilter.java:100)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:3592)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppS
ervletContext.java:2202)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletC
ontext.java:2108)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j
ava:1432)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row no
t found)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatche
r.java:25)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:688)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:641)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52
)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204)
at com.whir.util.DB.save(DB.java:16)
at com.whir.action.GroupAction.adddefault_group_user(GroupAction.java:13
3)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchActio
n.java:280)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:
216)
at org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:274)
设置级联了为什么不能保存,本人菜鸟,求解。hibernate 级联
class="com.whir.model.Group"
column="groupid"
insert="true"
update="true"
cascade="none"
outer-join="auto"
/>
group.hbm.xml中one-to-many内容如下:
<set name="users"
schema="ezoffice"
lazy="true"
inverse="true"
table="t_user"
cascade="all"
sort="unsorted">
<key column="groupid"></key>
<one-to-many class="com.whir.model.User"/>
</set>
然后我在函数中保存group,在保存group的时候也想把user的一个对象保存到数据库中:函数代码如下:
DB db = new DB();
User u1 = new User();
u1.setUsername("default_u1");
u1.setPassword("default_u1pwd");
u1.setAge(23);
u1.setPhone("sdfsd");
u1.setSex("男");
u1.setRegisterdate(new Date(System.currentTimeMillis()));
Group group = new Group();
group.setGroupname("default_groupname");
group.setGroupdesc("default_groupdesc");
group.getUsers().add(u1);
u1.setGroup(group);
db.save(group);在运行的时候group能保存,但是u1没有保存,报错内容如下:[20/03/13 03:13:32:032 CST] ERROR impl.SessionImpl: Could not synchronize databa
se state with session
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row no
t found)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatche
r.java:25)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:688)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:641)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52
)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204)
at com.whir.util.DB.save(DB.java:16)
at com.whir.action.GroupAction.adddefault_group_user(GroupAction.java:13
3)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchActio
n.java:280)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:
216)
at org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:148
2)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run
(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecuri
tyHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav
a:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:56)
at com.whir.common.util.SetCharacterEncodingFilter.doFilter(SetCharacter
EncodingFilter.java:100)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:3592)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppS
ervletContext.java:2202)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletC
ontext.java:2108)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j
ava:1432)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row no
t found)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatche
r.java:25)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:688)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.jav
a:641)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52
)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204)
at com.whir.util.DB.save(DB.java:16)
at com.whir.action.GroupAction.adddefault_group_user(GroupAction.java:13
3)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchActio
n.java:280)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:
216)
at org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:274)
设置级联了为什么不能保存,本人菜鸟,求解。hibernate 级联
还有xml能用代码编辑器么?
schema="ezoffice"
lazy="true"
inverse="true"
table="t_user"
cascade="all"
sort="unsorted"
inverse="true">
<key column="groupid"></key>
<one-to-many class="com.whir.model.User"/>
</set>
加上红色部分试试