我使用Liquibase创建数据库(Derby)的DDL模式。另外,我使用了JPA和sql,并且我希望使用EclipseLink,这样它就不会为主键插入任何值,并且我希望通过纯EclipseLink生成它们。现在,我尝试删除实体中的生成类型策略,但它试图将PKs的空值插入到表中,这对于PKs是不允许的。
如果你能帮我,我会很高兴的。
现在我有了这个,但它给了我下面的例外。
@Entity
@XmlRootElement
@Table(name = "ROLE")
public class Role implements Serializable {
private static final long serialVersionUID = 4736444799522006644L;
@ Id
@ JsonIgnore
@ GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;和
CREATE TABLE Role (
id BIGINT PRIMARY KEY NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
role VARCHAR(255)
);异常描述:类的属性id ...映射到数据库中的主键列。不允许更新。
发布于 2016-06-24 20:51:02
您可以创建一个用于生成ID的序列(而不是默认生成的序列,从1开始,以1为增量)。这是一种更好的方法,之后你可以在JPA中使用你的序列:
...
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ")
@SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100)
private long id;
...
}您可以在SQL <sequence>.NEXTVAL中使用sequence来获取新的ID值。
有关更多信息,请查看https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing
不幸的是,如果你的数据库不支持序列,这个方法就不能工作。
或者对于您的Derby DB,您可以尝试这样做(如果主键作为标识生成)
@Entity
public class EntityWithIdentityId {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
....
}https://stackoverflow.com/questions/38013575
复制相似问题