使用set <object>(多对多)</object>保留对象

时间:2014-03-17 15:41:31

标签: java hibernate java-ee hibernate-mapping

我有2个表:服务和付费,这2个表之间的关系是多对多=&gt;关联: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的子类, 我该怎么做才能让它发挥作用

1 个答案:

答案 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>
相关问题