JPA:在merge()之后包含evaulate仍为false

时间:2017-08-16 10:09:34

标签: jpa eclipselink

我的主要问题是删除(+持久)实体:

我有一个实体Property,它有几个PropertyAttributes - 按列表管理,即

@OneToMany(mappedBy = "property", cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH })
@JoinFetch(value = JoinFetchType.INNER)
private List<PropertyAttribute> propertyAttribute;
PropertyAttribute中的

我也有Property的引用,即

@Id
@JsonIgnore
@JoinColumn(name = "property_id")
@ManyToOne(cascade = { CascadeType.MERGE })
private Property property; 

当我想删除某些属性时出现主要问题,例如

getEntityManager().remove(attrEntity);

因为在实体中找不到。如果我介绍一些像

这样的代码
if (!getEntityManager().contains(attrEntity)) {
    attrEntity = getEntityManager().merge(attrEntity);
}
System.out.println(getEntityManager().contains(attrEntity)); //==> always false

我不清楚为什么merge()对整体没有影响。任何想法要检查什么或改变什么?

另外:我尝试了解决方法从PropertyAttribute本身和Property删除merge(myChangedProperty)但删除的属性不会保留,即仍在数据库中

0 个答案:

没有答案