在 JSF 中使用 EJB 和 JPA 构建 Web 应用程序 我想知道如何获取实体的修改字段。
让我们举一个简单的例子:
@Entity
@Table
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "firstname", nullable = false, length = 45)
private String firstname;
// ...
}
现在在我的 EJB 的方法“编辑”中:
@Singleton
public class UserService {
@PersistenceContext
protected EntityManager em;
public void edit(User user) {
this.em.merge(user);
}
}
我想知道发生了什么变化,例如说“用户最初被命名为 'john' 他现在是 'johny'!”。
我正在做的步骤:
1)搜索 ID 为 1 的用户 2)显示表单(作为 html)帮助 JSF(绑定由 JSF 管理) 3)编辑名字字段 4)提交表单,我正在编辑我的用户对象 5)在持久化之前我想和旧的比较一下 6)问题是我不能用this.em.find(1);
我已经得到它来获取它
我试过 :
@Singleton
public class UserService {
@PersistenceContext
protected EntityManager em;
public void edit(User user) {
System.out.println("USER 1 : " + user.getFirstname());
User u2 = this.em.find(User.class, 1);
System.out.println("USER 1 : " + user.getFirstname());
System.out.println("USER 2 : " + user.getFirstname());
this.em.merge(user);
System.out.println("USER 1 : " + user.getFirstname());
System.out.println("USER 2 : " + user.getFirstname());
}
}
我越来越 :
USER 1 : johny
USER 1 : johny
USER 2 : johny
USER 1 : johny
USER 2 : johny
我很确定 JPA 在内部确实知道已修改的内容,是否有一种神奇的方法,或者我应该保留自己的旧值还是自己使用 SQL 查询数据库?