我正在与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,这意味着连接表总是空的
答案 0 :(得分:0)
我认为问题是service.getPays()标有inverse="true"
。这意味着Hibernate应该忽略关系的这一方并仅跟踪另一方。
尝试将inverse = true移动到关系的另一侧,然后级联保存应该有效。