小弟一个一对多关系的单向关联关系 <set name="appendent" lazy="true" cascade="save-update">
<key column="INFORID"/>
<one-to-many class="com.job.model.information.Apendent"/>
</set>一起保存主表和次表时候 这种设置报错 object references an unsaved transient instance
但是
<set name="appendent" lazy="true" cascade="all">
<key column="INFORID"/>
<one-to-many class="com.job.model.information.Apendent"/>
</set>就没问题,这是为什么啊
<key column="INFORID"/>
<one-to-many class="com.job.model.information.Apendent"/>
</set>一起保存主表和次表时候 这种设置报错 object references an unsaved transient instance
但是
<set name="appendent" lazy="true" cascade="all">
<key column="INFORID"/>
<one-to-many class="com.job.model.information.Apendent"/>
</set>就没问题,这是为什么啊
帮你顶一下!
我是先保存主类在保存子类,当ALL的时候
Hibernate: insert into JOB_INFORMATION (SID, TITLE, CONTENT, UPDATE_PERSION, KIND, ADDTIME, ID) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into JOB_APPENDENT (INFORID, NAME, URL, ID) values (?, ?, ?, ?)
应该没问题吧
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.job.model.information.Information" table="JOB_INFORMATION" dynamic-update="true">
<id name="ID" type="java.lang.Integer">
<column name="ID" />
<generator class="sequence">
<param name="sequence">JOB_INFOR_ID</param>
</generator>
</id>
<property name="SID" type="java.lang.String">
<column name="SID" length="200"/>
</property>
<property name="TITLE" type="java.lang.String">
<column name="TITLE" length="200" />
</property>
<property name="CONTENT" type="java.lang.String">
<column name="CONTENT" length="1400" />
</property>
<property name="PERSION" type="java.lang.String">
<column name="UPDATE_PERSION" length="200" />
</property>
<property name="kind" type="java.lang.String">
<column name="KIND" length="200" />
</property>
<property name="ADDTIME" type="timestamp">
<column name="ADDTIME" />
</property>
<set name="ref" lazy="true" cascade="delete">
<key column="INFORID"/>
<one-to-many class="com.job.model.information.Inforef"/>
</set>
<set name="appendent" lazy="true" cascade="save-update" > //all的时候没问题
<key column="INFORID"/>
<one-to-many class="com.job.model.information.Apendent"/>
</set>
</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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.job.model.information.Apendent" table="JOB_APPENDENT" dynamic-update="true"> //这里去掉 dynamic 也一样
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="sequence">
<param name="sequence">JOB_APPENDENT_ID</param>
</generator>
</id>
<property name="inforid" type="java.lang.Integer">
<column name="INFORID" />
</property>
<property name="name" type="java.lang.String">
<column name="NAME" length="200" />
</property>
<property name="url" type="java.lang.String">
<column name="URL" length="200" />
</property>
</class>
</hibernate-mapping>
public String addInfor() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String login = ActionContext.getContext().getSession().get("userName").toString();
String content = request.getParameter("test");
String title = request.getParameter("title");
String sid = JobUtil.getUUID();
Information model = new Information();
model.setSID(sid);
model.setCONTENT(content);
model.setPERSION(login);
model.setTITLE(title);
model.setKind("0"); //0 没发布 1 发布
model.setADDTIME(new Date());
Set temp = new HashSet();
//附件处理
if (uploads != null)
{ for(int i=0;i<uploads.size();i++)
{
String targetDirectory = request.getRealPath("/appendent");
String targetFileName = generateFileName(fileNames.get(i));
File target = new File(targetDirectory, targetFileName);
FileUtils.copyFile(uploads.get(i), target);
Apendent app = new Apendent();
app.setName(fileNames.get(i));
app.setUrl("/jobmaster/appendent/"+targetFileName);
temp.add(app);
}
model.setAppendent(temp);
}
inforService.addInformation(model); //当级联为SAVE-UPDATE这里就报错了
return SUCCESS;
}