2013-04-09 4 views
1

CRUD 작업을 수행하는 방법을 배우려고하지만 내 DB에서 기존 행을 업데이트하는 방법을 파악할 수 없습니다. 생성 및 삭제 작업 부분을 얻었지만 실제로 업데이트 부분을 해결하는 방법을 모르겠습니다. 나는 그것에 대해 많은 것을 봤지만 나는 완전히 이해할 수있는 설명을 찾을 수 없다.DB에서 행을 업데이트하십시오.

import java.util.List; 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityTransaction; 
import javax.persistence.PersistenceContext; 
import javax.persistence.Query; 

@Stateless 
public class Modell { 

    @PersistenceContext(unitName = "mess") 
    private EntityManager em; 
    private EntityTransaction tx; 

    public void addMessage(String message) { 
     EntityDB me = new EntityDB(); 
     me.setMessage(message); 
     em.persist(me); 
    } 


    public void delete(EntityDB entityDB) { 
     em.remove(em.merge(entityDB)); 

    } 

    public void edited(EntityDB entityDB) { 
     EntityDB me = new EntityDB(); 
     //tx.begin(); 
     em.persist(me); 
     // EntityDB me = new EntityDB(); 
     me.setMessage("edited"); 
     em.merge(entityDB); 
     //tx.commit(); 

    } 

    public List<EntityDB> findAll() { 
     Query namedQuery = em.createNamedQuery("findAllMessageEntities"); 
     return namedQuery.getResultList(); 
    } 
} 

누군가 나를 올바른 방향으로 가리킬 수 있습니까? 현재 편집 메소드는 다른 행만 추가합니다.

답변

3

엔티티를 업데이트해야하는 경우 새 인스턴스를 만드는 대신 데이터베이스에서 기존 엔티티에 변경 사항을 적용해야합니다.

public void edited(EntityDB entityDB) {  

    EntityDB me = em.find(EntityDB.class, pk); //-- Else create query 
    me.setMessage("edited"); 
    em.merge(me); 
} 
+0

정말 고마워요! 내가 그 사람을 보지 못했던 것 같아요. – user2261654

+0

@ user2261654 당신은 천만에요. –

+0

덧붙여 말하자면, 'merge()'호출이 필요 없다; 'find()'호출은 발견 된 엔티티를 이미 영속 컨텍스트에 위치시킵니다. –

관련 문제