JPA容器是否更新实体的项目?
我正在寻找如何使用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;
@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我已编辑了文章