我在Employee类中有以下定义
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "employee_id")
private Integer employeeId;
现在我想用现有员工ID导入现有员工。即使我在保存之前设置了员工ID,也会忽略分配的ID,并存储自动递增的ID。我们如何覆盖这个?
答案 0 :(得分:1)
你无法覆盖它。首先,JPA没有提供这样做的方法。第二个问题是GenerationType.AUTO可以生成这样一种列类型,它不会通过SQL语句接受用户赋值。
手动导入数据,不要尝试将应用程序本身用作导入工具。
答案 1 :(得分:0)
在这种情况下,最好有一个@MappedSuperclass
@MappedSuperclass
public AbstractEmployee {
// declare all properties, getters, setters except for the id
}
@Entity
@Table(name="EMPLOYEE")
public class Employee extends AbstractEmployee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "employee_id")
private Integer employeeId;
...
}
@Entity
@Table(name="EMPLOYEE")
public class EmployeeWithAssignedId extends AbstractEmployee {
@Id
@Column(name = "employee_id")
private Integer employeeId;
...
}
因此,当您想手动分配ID时,请使用第二个类。我没有测试过这个,但我相信它应该适用于你的情况。我不相信JPA中有任何规则说两个类不能具有相同的表名:)
答案 2 :(得分:0)
您必须覆盖getEmployeeId()方法并在此方法上使用Annotation 在这种情况下,JPA对类中的所有字段使用getter方法,您必须在getter方法上移动其他Annotaions