gpt4 book ai didi

java - @EmbeddedId 和使用 @GenerateValue 自动生成的 id,这种组合不能按需要工作

转载 作者:行者123 更新时间:2023-12-02 08:07:04 25 4
gpt4 key购买 nike

我正在尝试使用@EmbeddedId,这是我的代码,如下所示,

create table TBL_EMPLOYEE_002(
ID integer generated always as identity (start with 100,increment by 10),
COUNTRY varchar(50),
NAME varchar(50),
constraint PK_EMP_00240 primary key(ID,COUNTRY)
)

Embedded类如下,

@Embeddable
public class EmployeeIdTwo implements Serializable{
public EmployeeIdTwo(){}
public EmployeeIdTwo(String country){
this.empCountry = country;
}

@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Integer employeeId;

@Column(name="COUNTRY",length=50)
private String empCountry;

// implementation of hashCode and equals and only getters
...
}

员工实体如下,

@Entity
@Table(name="TBL_EMPLOYEE_002")
public class EmployeeEntitySix implements Serializable{

public EmployeeEntitySix(){}
public EmployeeEntitySix(EmployeeIdTwo id,String name){
this.id = id;
this.employeeName = name;
}

@EmbeddedId
private EmployeeIdTwo id;

@Column(name="NAME")
private String employeeName;

// getters and setters
}

这是main方法中编写的代码,

private static void storVal(EntityManager em){
EmployeeEntitySix employee = new EmployeeEntitySix(new EmployeeIdTwo("KENYA"), "Henry Olaanga");
em.persist(employee);
}

但是一旦我运行上面的代码,我就会得到如下异常,

Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Attempt to modify an identity column 'ID'. 

你能告诉我我错在哪里吗?如果我的 EmbeddedId 类包含自动生成的列,那么应该采用什么方法。

只是知道我正在使用 hibernate 作为持久性提供程序并使用 JPA 作为持久性 API

最佳答案

我假设如果 Id 可以轻松且唯一地识别员工,您就不会问这个问题。如果您能够修改表,我建议您要么使 Id 可靠地唯一,要么添加自动生成的 UniqueId 列。

其中一些错误实际上来自数据库模式,而不是来自 JPA/Hibernate。如果您尝试更新数据库没有生成策略的列,这可能就是导致错误的原因。

您还可以查看autoincrement id is not reflecting in composite key using JPA ,因为我认为这涵盖了您所问的问题。

关于java - @EmbeddedId 和使用 @GenerateValue 自动生成的 id,这种组合不能按需要工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701576/

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