我有两个实体MobeeCustomer和CustomerRegion我想从CustomerRegion中删除对象我将CustomerRegion中的连接Coloumn设为null然后删除对象 来自entityManager,但我得到了例外
MobeeCustomer:
public class MobeeCustomer implements Serialization{ private Long id; private String custName; private String Address; private String phoneNo; private Set<CustomerRegion> customerRegion = new HashSet<CustomerRegion>(0); @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, fetch = FetchType.LAZY, mappedBy = "mobeeCustomer") public Set<CustomerRegion> getCustomerRegion() { return CustomerRegion; } public void setCustomerRegion(Set<CustomerRegion> customerRegion) { CustomerRegion = customerRegion; } }
CustomerRegion
public class CustomerRegion implements Serializable{
private Long id;
private String custName;
private String description;
private String createdBy;
private Date createdOn;
private String updatedBy;
private Date updatedOn;
private MobeeCustomer mobeeCustomer;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MOBEE_CUSTOMER")
public MobeeCustomer getMobeeCustomer() {
return mobeeCustomer;
}
public void setMobeeCustomer(MobeeCustomer mobeeCustomer) {
this.mobeeCustomer = mobeeCustomer;
}
}
示例代码:
if (doUpdateRegion.getStatus().equals(UserOperations.DELETE.getType())) {
custEntity = getEntityManager().find(CustomerRegion.class,doUpdateRegion.getId());
BeanUtils.copyProperties(custEntity, doUpdateRegion);
deletedRegionsList.add(custEntity);
}
for (CustomerRegion region : deletedRegionList) {
region.setMobeeCustomer(null);
getEntityManager().remove(region);
}
StackTrace:
please suggest me how to remove the CustomerRegion Object I am getting Exception
javax.persistence.EntityNotFoundException: deleted entity passed to persist: [com.manam.mobee.persist.entity.CustomerRegion#<null>]
15:46:34,614 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:613)
15:46:34,614 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:299)
15:46:34,614 ERROR [STDERR] at org.jboss.seam.persistence.EntityManagerProxy.flush(EntityManagerProxy.java:92)
15:46:34,614 ERROR [STDERR] at org.jboss.seam.framework.EntityHome.update(EntityHome.java:64)
答案 0 :(得分:0)
您正在尝试删除没有id
的实体。因此,实体管理器无法在DB中找到它。这是一个独立的实体。
尝试从数据库中检索区域列表,然后再删除它们。
如果你这样做,那么这似乎是一个transaction
问题。您在事务之外,因此实体与会话分离。尝试在同一个事务中执行所有操作,不要调用entityManager.remove()
,只需从集合中删除项目,并在关闭事务并提交时自动刷新。
例如Spring
@Transactional(readOnly = false)
public void deleteRegions(Set<CustomerRegion> deletedRegionList){
revion.getMobeeCustomer().getCusotmerRegion.removeAll(deletedRegionList);
}
如果该方法结束了它将提交的事务。所有修改Hibernate / JPA都会调用flush,它会将内存状态与DB同步。
答案 1 :(得分:0)
也许问题是MobeeCustomer中仍然存在对CustomerRegion的引用。如果这是问题,这应该解决它:
for (CustomerRegion region : deletedRegionList) {
region.getMobeeCustomer().getCustomerRegion().remove(region);
getEntityManager().remove(region);
}