EJB 3编辑数据库记录

Pau*_*nis 3 java mysql ejb jpa java-ee

我使用EJB和JPA更新数据库记录时遇到问题.持久性提供者:org.eclipse.persistence.jpa.PersistenceProvider

当我创建一个记录时,我正在使用这个方法:

public void create(T entity) {
    getEntityManager().persist(entity);
}
Run Code Online (Sandbox Code Playgroud)

一切都好.现在我要编辑同一条记录.例如,我有一个实体:

@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
}
Run Code Online (Sandbox Code Playgroud)

例如,我想只更新operationStatus.我正在创建一个实体,设置相同的记录ID和新的operationStatus.为了更新我使用这种方法:

public void edit(T entity) {
    getEntityManager().merge(entity);
}
Run Code Online (Sandbox Code Playgroud)

问题是当我更新记录时状态正确更新但所有其他列的值都设置为null不像以前那样保留.我想只更新operationStatus并保持其他值不变.使用EJB可以做到这一点吗?我应该改变什么来实现这一目标?

小智 5

首先使用Operation op = getEntityManager().find(Operation.class,id)加载实体.然后执行op.setOperationStatus(value).就是这样,它会在会话刷新/关闭时得到更新.