我有容器类型,带有一组项目,以及带有容器引用的tiems。
对于我的问题,关系的哪一方管理持久性,收集方或参考方并不重要。
Container c=new Container(12L);
Item i=new Item(1L);
Item i2=new Item(2L);
i.setContainer(c);
c.addItem(i);
i2.setContainer(c);
c.addItem(i2);
session.save(c);
session.save(i);
session.save(i2);
tx.commit();
然后在新的会话中我遍历集合,然后集合将在Ehcache中,如[1L,2L],
c=session.get(Container.class,12L);
Set<Item>items=c.getItems();
Iterator<Item>iterator=items.iterator();
然后在新会话中,我创建一个新项目,将其添加到集合中,
c=session.get(Container.class,12L);
Item i3=new Item(3L);
i3.setContainer(c);
c.getItems().add(i3);
session.save(i3);
tx.commit();
在数据库中,将在items表中插入一个新行,其中包含容器表中行的外键,所以这没关系。
但是在Ehcache中删除了[1L,2L],没有添加新值,因此Ehcache条目为空。
我做错了什么?
以下是我对Hibernate文件的映射:
<class
name="Container"
>
<cache
usage="read-write"/>
<id
name="id"
column="id__"
>
<set
name="items"
inverse="true"
>
<cache usage="read-write"/>
<key
column="container_"
not-null="true"
></key>
<one-to-many class="Item"/>
</set>
</class>
<class
name="Item"
>
<cache
usage="read-write"/>
<id
name="id"
column="id_"
>
<many-to-one
name="container"
column="container_"
not-null="false"
>
</many-to-one>
</class>