2010-07-09 5 views
1

JPA를 사용하여 개체를 병합하는 데 문제가 있습니다. 내 코드는 이렇게됩니다. 내 테스트 케이스를 실행하면 jpa merge not working

EntityTransaction entr = em.getTransaction(); 

entr.begin(); 

Query q = em 
    .createQuery("SELECT filterName FROM IbFilterName filterName where" 
    + " filterName.filterId = 42352 "); 

List<IbFilterName> filterNameList = q.getResultList(); 

for(IbFilterName filterName : filterNameList){ 
    String values = filterName.getFilterValues(); 
    filterName.setFilterValues(values+"Saranya"); 
    em.merge(filterName); 
} 

entr.commit(); 

그리고 내 엔티티 잘 JPA 콘솔의 모든 쿼리를 발생하지 않는 등의 내 FILTERNAME 개체를 업데이트하지 않습니다 병합,

@Id 
@SequenceGenerator(name = "IB_FILTER_NAMES_FILTERID_GENERATOR", sequenceName = "IB_LOGIN_HISTORY_SEQ") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IB_FILTER_NAMES_FILTERID_GENERATOR") 
@Column(name = "FILTER_ID") 
protected long filterId; 

@Column(name = "EXTERNAL_USER") 
protected String externalUser; 

@Column(name = "FILTER_NAME") 
protected String filterName; 

@Column(name = "FILTER_VALUES") 
protected String filterValues; 

// bi-directional many-to-one association to IbPortfolioFilterMapping 
@OneToMany(mappedBy = "ibFilterName") 
private Set<IbPortfolioFilterMapping> ibPortfolioFilterMappings; 

입니다.

아무도 내가 뭘 잘못 권고하고 있습니까?

답변

2

첫 번째 쿼리가 실제로 레코드를 검색하고 있습니까? IMO,이 쿼리는 매개 변수로 long이 필요합니다.

또한

당신의 실체가 분리되지 않기 때문에, 나는 하지 통화 병합에 제안하고 JPA를 감지하고 자동으로 변경 사항을 플러시 보자

em.getTransaction().begin(); 

Query q = em 
    .createQuery("SELECT filterName FROM IbFilterName filterName WHERE" 
    + " filterName.filterId = :id ").setParameter("id", 42352L); 

List<IbFilterName> filterNameList = q.getResultList(); 

for(IbFilterName filterName : filterNameList){ 
    String values = filterName.getFilterValues(); 
    filterName.setFilterValues(values + "Saranya"); 
    //em.merge(filterName); // DON'T 
} 

em.getTransaction().commit();