2014-02-03 2 views
1
EntityManager em = EMF.get().createEntityManager(); 
em.getTransaction().begin(); 
em.remove(em.find(Suggestion.class,Integer.parseInt(suggId))); 
em.getTransaction().commit(); 

cas_e = em.find(Case.class, cas_e.getId()); 

Здесь предложения отображаются в случае юридического лицо, и хотя один из предложений из списка предложений удаляются последняя строка возвращает то же количество внушения:JPA: Entity изменяется, но найти запрос возвращает ту же сущность

@Entity 
Case { 
private List<Suggestion> suggestions; 

@OneToMany(mappedBy = "caze", fetch = FetchType.EAGER, cascade=CascadeType.REMOVE) 
    public List<Suggestion> getSuggestions() { 
     return (suggestions); 
    } 

    public void setSuggestions(List<Suggestion> suggestions) { 
     this.suggestions = suggestions; 
    } 
} 

Suggestion { 
private Case caze; 
@ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="case_id") 
    public Case getCaze() { 
     return caze; 
    } 
    public void setCaze(Case caze) { 
     this.caze = caze; 
    } 
} 

persistence.xml

... 
<property name="eclipselink.cache.shared.default" value="false" /> 
... 
+0

ok em.detach (cas_e); прежде чем найти решение проблемы, но я не знаю, почему именно – makkasi

ответ

1

похоже, что вы находитесь в транзакции и запрашивая объект, который уже загружен и управляется.

Когда вы запрашиваете управляемые элементы, поставщик сохранения сначала рассмотрит текущий контекст сохранения. Таким образом, в вашем случае это означает, что вы получите тот же экземпляр объекта назад.

Если вы хотите управляемый экземпляр, чтобы отразить изменения из БД, вы можете либо отключить и затем запрос (утомительных), или обновить:

em.refresh(cas_e); 

EDIT: если он не уверен, является ли экземпляр управляется при обновлении, вы можете сначала объединить его. Слияние не волнует, если вы передаете ему уже управляемую организацию:

cas_e = e.merge(cas_e); 
em.refresh(cas_e); 
+0

я пытался с em.refresh (cas_e); и он говорит, что не может обновить неуправляемую Entity. Это странно, потому что я использую это в компоненте ViewScoped, и этот объект должен управляться все время. Все, что угодно ... отсоединяется. Спасибо за ответ – makkasi

+0

Это действительно странно. Refresh действительно ожидает управляемый объект. Но если поведение hte изменится на detach, я бы принял управляемую сущность. Вы случайно отделитесь первым, а затем освежитесь? Если нет, вы можете убедиться, что сущность управляется путем ее слияния, см. Редактирование. – kostja

+0

Не могли бы вы отключить очистку кеша: 'em.getEntityManagerFactory(). GetCache(). EvictAll();' и посмотреть, изменит ли он поведение? – kostja

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