Hibernate:很多人都没有工作

时间:2014-03-31 16:29:30

标签: spring hibernate

我正在与hibernate建立多对多的关系

这是我在数据库中的表格:

表:服务 表:支付 和连接表:service-pays

我有2个实体:服务和支付 这是我的代码:

  public class Service implements java.io.Serializable {

    private Integer idService;
    private String nomService;
    private Set<Pays> payses = new HashSet<Pays>();
        // getters & setters
         ....
  }
  public class Pays implements java.io.Serializable {

    private Integer idPays;
    private String nomPays;
    private Set<Service> services = new HashSet<Service>(0);
        // getters & setters
         ....
  }

映射文件是:

<hibernate-mapping package="pckg">
   <class name="pckg.Service" dynamic-update="true" select-before-update="true"  table="service" catalog="database" lazy="false" >
        <id name="idService" type="java.lang.Integer">
            <column name="id_service" />
            <generator class="identity" />
        </id>
        <property name="nomService" />
        <set name="countries" table="service_pays" lazy="true"
            inverse="true" cascade="save-update">
            <key column="id_service" />
            <many-to-many column="id_pays" class="pckg.Pays" />
        </set>
</class>

</hibernate-mapping>

<hibernate-mapping package="pckg">
   <class name="pckg.Pays" dynamic-update="true" select-before-update="true"  table="service" catalog="database" lazy="false" >
     <id name="idPays" type="java.lang.Integer">
            <column name="id_pays" />
            <generator class="identity" />
        </id>
        <property name="nomPays" />
        <set name="ser" table="service_pays" lazy="true"
              cascade="save-update" >
            <key column="id_pays" />
            <many-to-many column="id_service" class="pckg.Service" />
        </set>


</class>

</hibernate-mapping>

我保存服务的方法:

   Pays p1= new Pays("France");
      Pays p2=new Pays("Italy");
      Set<Pays> list-pays=new HashSet<Pays>();
      list-pays.add(p1);
      list-pays.add(p2);

      Service service=new Service();
      service.setNomService("nomService"); 
      service.setCountries(list-pays);
      serviceBo.saveService(service);

这是serviceBo.saveService:

  public class ServiceBoImp implements ServiceBo ,Serializable{


    ServiceDao serviceDao;

    //getter & setter of serviceDao


    @Override
    public void saveService(Service sited) {

        serviceDao.saveService(sited);
    }
   }

这里是ServiceDao

public class ServiceDaoImp extends HibernateDaoSupport implements ServiceDao ,Serializable {

    @Override
    public void saveService(ServiceDsite s) {

        getHibernateTemplate().setCheckWriteOperations(false);

        getHibernateTemplate().save(s);

    } 
  }

问题是,当我使用Set保存服务时,服务正确保存但没有Pays,这意味着连接表总是空的

1 个答案:

答案 0 :(得分:0)

我认为问题是service.getPays()标有inverse="true"。这意味着Hibernate应该忽略关系的这一方并仅跟踪另一方。

尝试将inverse = true移动到关系的另一侧,然后级联保存应该有效。