我试图让问题变小,但我不能让它变小:(
我有2个实体,这就是它们的关联方式:
Collection (1) ----> (n) Item
Item (0 or 1) -----> (n) Item
即。每个Item
都与Collection
相关联。此外,每个Item
可以有0个或更多子项Item
。如果有孩子Item
,则子Item
将有一个非空parent_item_id
;
表格
集合
collection_id raw
产品
item_id raw
collection_id raw
parent_item_id raw
映射:
class Collections
{
@Id @Column("collection_id")
String id;
@OneToMany(fetch=FetchType.EAGER, cascadeType.ALL, mappedBy="collection")
List<Items> items;
}
class Items
{
@Id @Column("item_id")
String id;
@ManyToOne(optional=false)
@JoinColumn(name="collection_id")
Collections collection;
@ManyToOne(optional=true)
@JoinColumn(name="parent_item_id")
Items parentItem;
}
假设我创建了一个这样的对象:
//Constructor parameters are the Ids.
Collections collection1 = new Collections("1234");
Items i1 = new Items("111");
Items i2 = new Items("222");
item1.parentItem = item2;
item1.collection = collection1;
item2.collection = collection1;
List<Items> listItems = new ArrayList<Items>(1);
listItems.add(item2);
collection1.items = listItems;
我们有一个数据访问层(DA),它是JPA和Hibernate的包装器。 接下来,我执行两个操作:
Collections collection1 = DA.merge(collection1);
Collections collection2 = DA.find(collection1.id);
我希望collection2.items.size()
返回2.但它返回1.(PS:实际上有2个项目与collection1相关)。
可以解释一下吗?它是预期的还是DA中的错误? JPA是否缓存了Collection?
稍后,如果在另一个事务中,我尝试获取Collections collectionNew = DA.find("1234").items.size()
它返回2(预期);
答案 0 :(得分:0)
合并前后的collection1中的items.size()是什么? JPA实体是常规对象,因此如果大小不是2,则除非从数据库中刷新实体,否则它不会在查找之后。