我有2个表:服务和付费,这2个表之间的关系是多对多=>关联:Payschoisis 当我在数据库中持久化时,对象将在没有Hashset的情况下保存
这是我的代码:
Pays.hbm.xml
<set name="services" table="payschoisis" inverse="true" lazy="true" fetch="select">
<key>
<column name="id_pays" not-null="true" />
</key>
<many-to-many entity-name="com.Dialpass.model.Service">
<column name="id_service" not-null="true" />
</many-to-many>
</set>
Service.hbm.xml
<set name="payses" table="payschoisis" inverse="false" lazy="true" fetch="select" cascade="all">
<key>
<column name="id_service" not-null="true" />
</key>
<many-to-many entity-name="com.Dialpass.model.Pays">
<column name="id_pays" not-null="true" />
</many-to-many>
</set>
Pays.java
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "payses")
public Set<Service> getServices() {
return this.services;
}
public void setServices(Set<Service> services) {
this.services = services;
}
Service.java
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "payschoisis", catalog = "dialpass", joinColumns = { @JoinColumn(name = "id_service", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "id_pays", nullable = false, updatable = false) })
public Set<Pays> getPayses() {
return this.payses;
}
public void setPayses(Set<Pays> payses) {
this.payses = payses;
}
这里我坚持(对象在数据库中正确插入,但即使set_pays不为空也没有Hashset
ServiceDsite si=new ServiceDsite();
si.setNomService(getNom_service());
si.setPayses(set_pays);
serviceBo.addServicedsite(si);
DAO函数::
@Override
public void addServicedsite(ServiceDsite s) {
// TODO Auto-generated method stub
getHibernateTemplate().setCheckWriteOperations(false);
getHibernateTemplate().save(s);
}
PS:ServiceDsite是Service的子类, 我该怎么做才能让它发挥作用
答案 0 :(得分:0)
您的多对多映射未指定映射表。 (它将包含映射实体的两个主键)。这是一个xml映射示例,它显示了如何指定多对多关系所必需的表。
<set name="categories" table="stock_category"
inverse="false" lazy="true" fetch="select" cascade="all" >
<key>
<column name="STOCK_ID" not-null="true" />
</key>
<many-to-many entity-name="com.mkyong.stock.Category">
<column name="CATEGORY_ID" not-null="true" />
</many-to-many>
</set>