JPA容器是否更新实体的项目?

JPA容器是否更新实体的项目?,jpa,vaadin7,Jpa,Vaadin7,我正在寻找如何使用JPA容器对我的实体的某个项目进行更新。该项目是唯一的,我想通过该项目进行更新 @Entity @Table(name="curriculum") public class Curriculum implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long idCurriculum;

我正在寻找如何使用JPA容器对我的实体的某个项目进行更新。该项目是唯一的,我想通过该项目进行更新

@Entity
@Table(name="curriculum")
public class Curriculum implements Serializable{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Long idCurriculum;

    @Size(min=5, max=50)
    @NotNull
    @NotEmpty   
    private String nome;

    @Email
    @NotEmpty
    @NotNull
    @Size(max=250)
    @Column(unique=true)
    private String email;

    @NotEmpty
    @NotNull
    @Size(min=8, max=8)
    private String senha;
}
在这种情况下,我想使用电子邮件更新senhapassword,这是一个唯一的键

有什么想法吗

/**编辑*/

我设法用标准来做这件事。我不知道这是否正确,但目前它是有效的

这里,我是怎么做到的

public void changePassword(String email, String password){
     try{
            EntityManager em = datasource.getEntityProvider().getEntityManager();       
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery<Curriculum> c = cb.createQuery(Curriculum.class);
            Root<Curriculum> curriculum = c.from(Curriculum.class);
            c.where(
                    cb.equal(curriculum.get("email"), email)
                    );
            TypedQuery q = em.createQuery(c);
            Curriculum ce = (Curriculum)q.getSingleResult(); //ce = curriculum entity
            datasource.getItem(ce.getIdCurriculum()).getItemProperty("password").setValue(password);

        }catch(Exception e){
            Notification.show("Curriculum not found \n", 
                      e.getLocalizedMessage(), 
                      Type.ERROR_MESSAGE);
        }
     }

另一个解决方案更简单,仅使用JPA容器?

因为电子邮件不是Id字段,我会首先使用键入的、命名的或本地的查询来获取要更新的课程对象,然后通过EntityManager更新它。合并:

EntityManager em = ...
TypedQuery<Curriculum> query = em.createQuery(
           "SELECT c FROM Curriculum c " +
           "WHERE c.email = :p1",
           Curriculum.class);
query.setParameter("p1", "myemail@myhost.com");
Curriculum curriculum = (Curriculum) query.getSingleResult();
curriculum.setSenha("mypwd");
em.merge(curriculum);

是否将此项目绑定到任何字段组,或者是否通过编程方式修改项目?@nexus我不绑定此项目,我想通过编程方式进行更改。@nexus我已编辑了文章