2012-06-12 2 views
0

У меня есть два объекта MobeeCustomer и CustomerRegion. Я хочу удалить объект из CustomerRegion. Сначала я поставил соединение Coloumn в CustomerRegion равным null. Затем удалите объект из entityManager, но Iam получение ИсключениеУдалить, тогда запрос завершился с ошибкой в ​​JPA (удаленный объект передан для сохранения)

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

Как вы получите список? – ssedano

+0

Я вижу, что вы новичок в stackoverflow, возможно, вы можете [посмотреть FAQ, чтобы узнать, как продвигать и принимать ответы] (http://stackoverflow.com/faq#howtoask) – Pablo

ответ

0

Вы пытаетесь удалить объект, который не имеет id. Таким образом, менеджер объектов не может найти его в БД. Это вызов отдельного объекта.

Попробуйте получить список регионов из БД, прежде чем удалять их.

Если вы это сделали, то это выглядит как проблема transaction. Вы находитесь за пределами транзакции и, следовательно, сущность отстранена от сеанса. Попробуйте сделать все это в одной транзакции и не вызывайте entityManager.remove(), просто удалите из коллекции элемент, и флеш будет автоматически при закрытии транзакции и фиксации.

Например с Spring

@Transactional(readOnly = false) 
public void deleteRegions(Set<CustomerRegion> deletedRegionList){ 
    revion.getMobeeCustomer().getCusotmerRegion.removeAll(deletedRegionList); 
} 

Если этот метод завершает транзакцию он будет совершать. Все модификации Hibernate/JPA завершают вызовы flush, которые синхронизируют состояние памяти с БД.

+0

Как он собирается удалить объект из база данных, если он не вызывает удаление? – Pablo

+0

, потому что когда транзакция завершает все изменения, JPA вызывает флеш, который синхронизирует состояние памяти с БД. Когда эти объекты становятся сиротами, если конфигурация является подходящей, объект будет удален. – ssedano

+0

В CustomerRegion, mobeeCustomer может быть нулевым, а идентификатор длинным. Мне кажется, что CustomerRegion может существовать без MobeeCustomer, поэтому они не станут сиротами. – Pablo

0

Возможно, проблема в том, что в MobeeCustomer по-прежнему имеется ссылка на CustomerRegion. Если это проблема, это должно исправить это:

for (CustomerRegion region : deletedRegionList) { 
     region.getMobeeCustomer().getCustomerRegion().remove(region); 
     getEntityManager().remove(region); 
} 
+0

Thankyou очень mush Pablo – nag

Смежные вопросы