我用hibernate多表插入的时候,为什么中间表只插入一条记录,应该是多条才对啊,求高手指教啊!

时间:2022-04-25 15:02:26
我用hibernate多表插入的时候,为什么中间表只插入一条记录,应该是多条才对啊,求高手指教啊!
我的数据库表如下:
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了。

#4


设置级联关系和维护关系  

#1


  能插入一条记录; 很奇怪 , 你调试看看是否stepList里面只有一条记录....

#2


是呀,我也纳闷为什么只插入一条,而且是在最前面的那一条,我调试了,stepList里面只有三条记录,只最前面的一条成功插入了,后面的都没有被插入

#3


加 cascade = {CascadeType.ALL}  试试看 ... 
怎么加 ,我忘了,好久没用这个版本的hibernate了。

#4


设置级联关系和维护关系