缺少多对多关联中的插入查询

时间:2016-04-14 18:19:01

标签: java hibernate insert mapping

我遇到的问题是Hibernate没有在两个类之间的关联表中插入一行。

我有2个班级:

public class Product {
    private Long id;
    private String name;
    private Set<Tag> tags;
    // getters and setters
}
public class Tag {
    private Long id;
    private String name;
    // getters and setters
}

Tag类是用于标记域中其他实体的通用类。在这种情况下Prodcut。但我也想把它用于其他的;这就是为什么Tag类没有任何对Product或任何其他类的引用的原因。

这两个实体之间的关系由数据库中的3个表表示,一个表示Product,一个表示Tag,另一个表示保持这两个表之间的关系(以下脚本由Hibernate生成):

create table products (id bigint generated by default as identity, name varchar(255) primary key (id))
create table tags (id bigint generated by default as identity, name varchar(255), primary key (id))
create table product_tags (product_id bigint not null, tag_id bigint not null, primary key (product_id, tag_id))
alter table product_tags add constraint FK_cwj7fm5pu6f1fxb3tvkksaass foreign key (tag_id) references tags
alter table product_tags add constraint FK_llxxxwkh6khck5jwra336sm3i foreign key (product_id) references products

Tag的映射文件:

<hibernate-mapping>
   <class name="test.Tag" table="tags">
      <id name="id" type="long" column="id">
         <generator class="identity" />
      </id>
      <property name="name" column="name" type="string" unique="true" />
   </class>
</hibernate-mapping>

Product:

的映射文件
<hibernate-mapping>
   <class name="test.Product" table="products">
      <id name="id" type="long" column="id">
         <generator class="identity" />
      </id>

      <property name="name" column="name" type="string" />

      <set name="tags" table="product_tags" cascade="save-update">
        <key column="product_id" not-null="true" />
        <many-to-many class="test.Tag">
            <column name="tag_id" not-null="true" />
        </many-to-many>
      </set>

   </class>
</hibernate-mapping>

我正在使用它:

Product p = new Product("Test");
p.setTags(new HashSet<>());
p.getTags().add(new Tag("tag1"));
dao.save(p);

这将生成以下SQL语句:

insert into products (id, name) values (null, ?)
insert into tags (id, name) values (null, ?)

如您所见,它缺少我在映射中定义的product_tags表中的插入。

我尝试将反转值从true更改为false,我也尝试使用不同的映射标记,例如一对多但没有成功。

我将不胜感激任何帮助。 感谢

0 个答案:

没有答案