gpt4 book ai didi

java - JPA @IdClass - 更新

转载 作者:行者123 更新时间:2023-12-01 15:00:34 25 4
gpt4 key购买 nike

如果你有一个类似的 IdClass

public class EmployeePK implements Serializable {

private String empName;
private Date birthDay;

public EmployeePK() {
}

public String getName() {
return this.empName;
}

public void setName(String name) {
this.empName = name;
}

public Date getBirthDay() {
return this.birthDay;
}

public void setBirthDay(Date date) {
this.birthDay = date;
}

public int hashCode() {
return (int)this.empName.hashCode();
}

public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof EmployeePK)) return false;
EmployeePK pk = (EmployeePK) obj;
return pk.birthDay.equals(this.birthDay) && pk.empName.equals(this.empName);
}

}

@IdClass(EmployeePK.class)
@Entity
public class Employee implements Serializable{

@Id String empName;
@Id Date birthDay;
...

public Employee (String empName, Date birthDay){
this.empName= empName;
this.birthDay= birthDay;
}
...
}

如何进行更新查询?

    EntityManagerFactory emf = Persistence
.createEntityManagerFactory("JPA_Compositekey");
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
Employee anemployee = em.find( **WHAT DO YOU FILL HERE **)
...

或者我必须使用 PK 类中的对象以及如果您只有一个需要更新的人该怎么办。

谢谢大家

最佳答案

对于所有其他实体:您提供一个 ID 实例:

EmployeePK pk = new EmployeePK(...);
Employee anemployee = em.find(Employee.class, pk);

要更新员工,就像任何其他实体一样:您修改其字段,并且在事务提交时自动保留新状态。只需确保不要更新姓名和出生日期:因为它们是 PK 的一部分,所以它们是不可变的。这是不使用复合键(尤其是功能复合键)的众多充分理由之一。

使用自动生成的代理键,一切都会变得更加容易。

关于java - JPA @IdClass - 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com