我知道Hibernate的一对多保存,需要建立一些关系,如A对应多个B,
那么A.getBs().add(B),同时B也要setA(A),也就是说保存前他们要建立双向关系,然后保存。现在我结合struts2和hibernate,想通过struts2传参的自动装配功能,可以在客户端传到Struts2时自动组装好一对多的关系,然后hibernate直接保存。 我现在遇到的问题是struts2传参,可以构建A-》B的关系,无法实现B-》A的关系,即无法自动调用B.setA,请问有谁知道怎么解决,让B.setA会自动调用.

解决方案 »

  1.   

    我不太明白你说的问题是什么?
    如果想实现一对多的双向关联的话,可以在两边进行配置就可以了!举个例子吧,比如Father和son的一对多关系,一个Father可以对应多个son,那么要在Father这么配置一个Set<Son>的属性,然后在son的一边配置一个Father对象的属性,然后配置hbm.xml,将他们映射为双向关联,可以映射为级联!我贴上代码吧,更清楚一点!Father:
    private int id;
    private String name;
    private Set<Son> sons;
    Son
    private int id;
    private String name;
    private Father father;
    Father.hbm.xml<hibernate-mapping>
    <class name="com.ibm.etp.entity.Father" table="father" schema="scott">
    <id name="id" column="f_id" type="java.lang.Integer">
    <generator class="increment"></generator>
    </id>
    <property name="name" column="f_name" type="java.lang.String" length="20"></property>
    <set name="sons" cascade="all">
    <key column="father_id"></key>
    <one-to-many class="com.ibm.etp.entity.Son"/>
    </set>
    </class>
    </hibernate-mapping>
    Son.hbm.xml<hibernate-mapping>
    <class name="com.ibm.etp.entity.Son" table="son" schema="scott">
    <id name="id" column="id" type="java.lang.Integer">
    <generator class="increment"></generator>
    </id>
    <property name="name" column="name" type="java.lang.String" length="20"></property>
    <many-to-one name="father" class="com.ibm.etp.entity.Father" cascade="all">
    <column name="father_id"></column>
    </many-to-one>
    </class>
    </hibernate-mapping>
    当你获得一个Father对象后,并设置好Father和Son的关系后,只要插入Father就可以保证也同时插入Son!
    获取的时候,只要你有Father对象,调用getSons就可以获得set类型的son的集合!
      

  2.   

     @ManyToOne(cascade={CascadeType.ALL})