jpa 自增字段自动添加 报错 “error performing isolated work”

本文介绍了在使用Java Persistence API (JPA) 进行数据库操作时,如何正确配置自增字段以避免插入数据时出现错误。通过使用 @GeneratedValue 注解,并指定 strategy 为 GenerationType.IDENTITY,可以确保自增字段在插入数据时不需手动设置值。

在使用Jpa对数据库进行操作是时,设置的自增字段在进行插入操作时也必须set,否则会报错添加失败。

使用 @GeneratedValue 注解能实现自增字段自动添加。

但是使用 @GeneratedValue 会报错 “error performing isolated work

    @Id
    @GeneratedValue
    private Integer newsId;

---------------------------------------------------错误分割线--------------------------------------------------------------

正确做法是使用  @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer newsId;

JPA中实现自ID有多种方式,以下为你介绍常见的使用和配置方法。 ### 使用`@GeneratedValue`注解结合`GenerationType.IDENTITY`策略 这是一种依赖数据库自特性的方式。示例代码如下,定义一个实体类`Person`与数据表进行映射: ```java package com.xinyi.entity; import javax.persistence.*; // 告诉JPA这是一个实体类(和数据表映射的类) @Entity // @Table来指定和哪个数据表对应;如果省略默认表名就是实体类的类名小写 @Table(name = "Person") public class Person { // 这是一个主键 @Id // 声明自以及自策略 @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; // Column注解表示这是和数据表对应的一个列,里面的值就是和数据表的具体对应,如果()里面省略不写,则默认列名就是实体类的属性名 @Column(name = "name", length = 50) private String name; @Column private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ``` 在上述代码中,`@Id`注解表明`id`字段是主键,`@GeneratedValue(strategy = GenerationType.IDENTITY)`则声明了自策略,此策略依赖数据库的自功能,适用于支持自列的数据库,如MySQL [^2]。 ### 不依赖数据库,用程序实现自ID 可使用`@GeneratedValue`和`@GenericGenerator`结合自定义的`IdentifierGenerator`来实现。这种方式可以让JPA不依赖数据库的自特性,由程序自己控制ID的生成。但具体代码在给定引用中未详细给出,一般步骤是先自定义一个实现`IdentifierGenerator`接口的类,然后在实体类中使用`@GenericGenerator`注解引用该类,再通过`@GeneratedValue`指定使用这个自定义的生成器 [^1]。 ### 复合主键含自id的情况 当需要使用分区,在主键里加入分区字段,使主键变为复合主键(包含自的id和一个分区的字段)时,要注意配置。若在`IdClass`里的自id属性使用`@GeneratedValue(strategy = GenerationType.IDENTITY)`,可能会导致错误 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值