2012-06-10 2 views
2

EJB 및 JPA를 사용하여 데이터베이스 레코드를 업데이트하는 데 문제가 있습니다. 지속성 제공자 : org.eclipse.persistence.jpa.PersistenceProviderEJB 3 데이터베이스 레코드 편집

내가 기록을 나는이 방법을 사용하고 만드는 오전 :

public void create(T entity) { 
    getEntityManager().persist(entity); 
} 

모든 괜찮습니다. 이제 같은 레코드를 편집하고 싶습니다. 예 : 나는 실체가있다 :

@Entity 
@Table(name = "OPERATION") 
public class Operation implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "ID") 
    private Long id; 

    @Column(name = "OPERATION_AUTHOR") 
    private String operationAuthor; 

    @Column(name = "OPERATION_TYPE") 
    private String operationType; 

    @Column(name = "OPERATION_STATUS") 
    private String operationStatus; 

    @Column(name = "CREATED") 
    @Temporal(value = TemporalType.DATE) 
    private Date created; 

    @Column(name = "COMPLETED") 
    @Temporal(value = TemporalType.DATE) 
    private Date completed; 

    //Getters and setters 
} 

operationStatus 만 업데이트하고 싶습니다. 엔티티를 생성하고 동일한 레코드 ID와 새로운 operationStatus을 설정합니다. 업데이트를 위해 나는이 방법을 사용하고 있습니다 : 나는 상태가 올바르게 업데이트 레코드를 업데이트 할 수 있지만 다른 모든 열 '값들이 예전과 같이 남아 있지 null로 설정된 경우

public void edit(T entity) { 
    getEntityManager().merge(entity); 
} 

문제입니다. operationStatus 만 업데이트하고 다른 값은 그대로 둡니다. 이것이 EJB를 사용하여 가능합니까? 그리고 이것이 일어나게하기 위해 무엇을 바꾸어야합니까?

답변

4

Operation op = getEntityManager(). find (Operation.class, id)를 사용하여 먼저 엔티티를로드하십시오. 그런 다음 op.setOperationStatus (value)를 수행하십시오. 세션 플러시/닫기에서 업데이트됩니다.

+0

.. 내 머리이어야합니다 :/이것에 대한

더 나은 옵션은 다음과 같은 방법이 될 수 있습니다. 고마워 완벽하게 :) –

1

entityManager.merge (엔터티)를 호출하면 개체에 설정 한 ID에 해당하는 db 행이 java 개체를 채우는 정확한 값으로 업데이트됩니다 (즉, 상태 및 ID를 제외한 모든 항목이 없는). 개체를 데이터베이스에서 가져 와서 업데이트해야합니다. 하루 종일 프로그래밍 작동하지

나는 그것을 내 자신을 생각하는 방법 didn'nt
/** 
* 
* @param id - the ID of the entity to update 
* @param operationStatus - the status to apply 
*/ 
public void setOperationStatus(long id, String operationStatus){ 
    Operation o = getEntityManager().find(Operation.class,id); 
    o.setOperationStatus(operationStatus); 
    getEntityManager().merge(entity); 
}