我们有这样的实体:
public User {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", insertable = true, updatable = true)
@ElementDependent
private List<Item_x> item_x_list = new ArrayList<Item_x>();
}
public Item_x {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", insertable = true, updatable = true)
@Element(name = "user_id", required = false)
private Users user;
}
每当我向 User.item_x_list 添加/删除项目,然后使用 em.merge(User.INSTANCE) 持久化 User 实体时,Item_x.user 属性为 NULL。
我正在使用 JOIN FETCH 查询加载 Item_x.user 属性,以确保加载该属性(当我需要它时)。但是:如果您对用户实体执行了合并,即使使用 FETCH JOIN,Item_x.user 属性也是 NULL。
我试图通过刷新 Item_x.INSTANCE 来解决,但是当我打电话时:
em.refresh(Item_x.Instance);
=> 用户为空。
查看数据库我当然可以看到 Item_x 中的用户不是空的。
如何强制 OpenJPA 在 Item_x 中正确加载用户?为什么 OpenJPA 没有正确填充 Item_x.user 属性/忽略 JOIN FETCH 语句?