【发布时间】:2014-03-17 15:41:31
【问题描述】:
我有 2 个表:Service 和 Pays,这 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 的子类, 我该怎么做才能让它工作
【问题讨论】:
-
那么您是使用 XML 映射,还是使用注释?如果您仍然有问题,请选择一个然后回来。来自文档:您可以将带注释的持久类和经典的 hbm.cfg.xml 声明与相同的 SessionFactory 混合。 ... [但是] 您不能在实体层次结构中混合配置策略(hbm 与注释)...
-
感谢您的回答,我删除了注释,但仍然有同样的问题
标签: java hibernate jakarta-ee hibernate-mapping