【问题标题】:Persist an object with a set<Object> (many to many)使用 set<Object> 持久化对象(多对多)
【发布时间】: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


【解决方案1】:

您的多对多映射未指定映射表。 (这将包含映射实体的两个主键)。这是一个 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>

【讨论】:

  • 我在映射多对多 table="payschoisis" .. 就像例子谢谢顺便说一句
猜你喜欢
  • 2011-11-28
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多