gpt4 book ai didi

java - 如何使用 JPA 注释注释 MYSQL 自动增量字段

转载 作者:IT老高 更新时间:2023-10-28 11:29:27 24 4
gpt4 key购买 nike

直截了当,问题是将对象运算符保存到 MySQL 数据库中。在保存之前,我尝试从该表中进行选择,它可以正常工作,与 db 的连接也是如此。

这是我的 Operator 对象:

@Entity
public class Operator{

@Id
@GeneratedValue
private Long id;

private String username;

private String password;


private Integer active;

//Getters and setters...
}

为了保存,我使用 JPA EntityManagerpersist 方法。

这是一些日志:

Hibernate: insert into Operator (active, password, username, id) values (?, ?, ?, ?)
com.mysql.jdbc.JDBC4PreparedStatement@15724a0: insert into Operator (active,password, username, id) values (0, 'pass', 'user', ** NOT SPECIFIED **)

在我看来,问题是自动递增的配置,但我不知道在哪里。

尝试了一些我在这里看到的技巧: Hibernate not respecting MySQL auto_increment primary key field但没有任何效果

如果需要任何其他配置文件,我会提供。

DDL:

CREATE TABLE `operator` ( 
`id` INT(10) NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(40) NOT NULL,
`last_name` VARCHAR(40) NOT NULL,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
`active` INT(1) NOT NULL,
PRIMARY KEY (`id`)
)

最佳答案

要使用 MySQL AUTO_INCREMENT 列,您应该使用 IDENTITY 策略:

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

在 MySQL 中使用 AUTO 会得到什么:

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

实际上相当于

@Id @GeneratedValue
private Long id;

换句话说,您的映射应该可以工作。但是 Hibernate 应该省略 SQL 插入语句中的 id 列,而事实并非如此。一定有某种不匹配的地方。

您是否在 Hibernate 配置中指定了 MySQL 方言(可能是 MySQL5InnoDBDialectMySQL5Dialect,具体取决于您使用的引擎)?

另外,谁创建了这个表?可以显示对应的DDL吗?

跟进:我无法重现您的问题。使用 your 实体的代码和 your DDL,Hibernate 使用 MySQL 生成以下(预期的)SQL:

insert 
into
Operator
(active, password, username)
values
(?, ?, ?)

请注意,如预期的那样,上述语句中缺少 id 列。

总而言之,您的代码、表格定义和方言是正确且连贯的,它应该可以工作。如果它不适合您,则可能某些内容不同步(进行干净的构建,仔细检查构建目录等)或其他错误(检查日志是否有任何可疑内容)。

关于方言,MySQL5DialectMySQL5InnoDBDialect唯一的区别在于后者添加了ENGINE=InnoDB生成 DDL 时到表对象。使用其中一种不会更改生成的 SQL。

关于java - 如何使用 JPA 注释注释 MYSQL 自动增量字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102449/

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