我的数据库表如下:
flow 表: id,name,remark,isUse
step 表:id,name,remark
flow_step 表:id,flowId,stepId
bean对象如下:
Flow.java
public class Flow {
private int id;
private String name;
private String remark;
private int isUse;
private List<Step> stepList = new ArrayList<Step>();
set,get方法....省略
}
Step.java
public class Step {
private int id;
private String name;
private String remark;
private List<Flow> flowList = new ArrayList<Flow>();
set,get方法....省略
}
映射文件如下:
Flow.hbm.xml<hibernate-mapping>
<class name="com.ql.sp.std.bean.Flow" table="flow">
<id name="id" type="java.lang.Integer" column="id">
<generator class="native" />
</id>
<property name="name" type="java.lang.String" column="name"></property>
<property name="remark" type="java.lang.String" column="remark"></property>
<property name="isUse" type="java.lang.Integer" column="isUse"></property>
<list name="stepList" lazy="false" table="flow_step" >
<key column="flowId"></key>
<index column="id"></index>
<many-to-many column="stepId" class="com.ql.sp.std.bean.Step"></many-to-many>
</list>
</class>
</hibernate-mapping>
Step.hbm.xml
<hibernate-mapping>
<class name="com.ql.sp.std.bean.Step" table="step">
<id name="id" type="java.lang.Integer" column="id">
<generator class="native" />
</id>
<property name="name" type="java.lang.String" column="name"></property>
<property name="remark" type="java.lang.String" column="remark"></property>
<list name="flowList" lazy="false" table="flow_step" inverse="true">
<key column="stepId"></key>
<index column="id"></index>
<many-to-many column="flowId" class="com.ql.sp.std.bean.Flow"></many-to-many>
</list>
</class>
</hibernate-mapping>
运行环境是:struts2+spring+hibernate
问题是:我在添加一个流程Flow对象的时候选择了三个Step步骤执行保存,结果数据库里的flow_step表里只保存了一条记录,应该是三条记录才对呀,不知道为什么,请高手指教!
执行保存的代码片段如下:
Flow flow = new Flow();
FlowService flowService = new FlowService();
flow.setName(name);
flow.setRemark(remark);
flow.setIsUse(isUse);//0代表未使用
if(this.flow_step != null){
List<Step> stepList = new ArrayList<Step>();
String[] stepIds = this.flow_step.split(",");
Step step = null;
for(String stepId : stepIds){
step = new Step();
step.setId(Integer.parseInt(stepId.trim()));
stepList.add(step);
}
flow.setStepList(stepList);
}
flowService.Insert(flow);
4 个解决方案
#1
能插入一条记录; 很奇怪 , 你调试看看是否stepList里面只有一条记录....
#2
是呀,我也纳闷为什么只插入一条,而且是在最前面的那一条,我调试了,stepList里面只有三条记录,只最前面的一条成功插入了,后面的都没有被插入
#3
加 cascade = {CascadeType.ALL} 试试看 ...
怎么加 ,我忘了,好久没用这个版本的hibernate了。
怎么加 ,我忘了,好久没用这个版本的hibernate了。
#4
设置级联关系和维护关系
#1
能插入一条记录; 很奇怪 , 你调试看看是否stepList里面只有一条记录....
#2
是呀,我也纳闷为什么只插入一条,而且是在最前面的那一条,我调试了,stepList里面只有三条记录,只最前面的一条成功插入了,后面的都没有被插入
#3
加 cascade = {CascadeType.ALL} 试试看 ...
怎么加 ,我忘了,好久没用这个版本的hibernate了。
怎么加 ,我忘了,好久没用这个版本的hibernate了。
#4
设置级联关系和维护关系