Spring Hibernate mysql:字段'id'没有默认值[重复]

Posted

技术标签:

【中文标题】Spring Hibernate mysql:字段\'id\'没有默认值[重复]【英文标题】:Spring Hibernate mysql: Field 'id' doesn't have a default value [duplicate]Spring Hibernate mysql:字段'id'没有默认值[重复] 【发布时间】:2020-01-02 20:47:15 【问题描述】:

我知道之前有人问过这个问题,但无法解决问题。 我想通过@Entitiy 类生成一个表。

@Entity
public class Test implements Serializable
    @Id
    @GeneratedValue long id;

.
.
.

在我的应用属性中我得到了:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.show_sql=true

我正在运行 mysql 5.7。问题是创建了表并且 id 被标记为主键。但是 Default 是 NULL 并且 Extra (我期望自动增量)是空的。

+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | bigint(20)   | NO   | PRI | NULL    |       |
+----------+--------------+------+-----+---------+-------+

是否有我遗漏的东西或已被设计的东西?

【问题讨论】:

【参考方案1】:

您的意思是要对 id 字段使用自动增量?如果是,则必须将@GeneratedValue的策略指定为IDENTITY

@Entity
public class Test implements Serializable 

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


【讨论】:

谢谢你,成功了。我尝试了基于objectdb.com/java/jpa/entity/generated 的.AUTO 但这不起作用,而据我所知,应该为新对象自动生成ID。

以上是关于Spring Hibernate mysql:字段'id'没有默认值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CannotAcquireLockException(Spring、Hibernate、MySQL)

Spring Boot 的 Hibernate 字段命名问题(命名策略)

Spring Boot 的 Hibernate 字段命名问题(命名策略)

Spring、Spring Security、JPA、MySQL、Hibernate 配置

Hibernate Interceptor 中自动装配字段的空指针异常(类由 Spring 管理)

Spring+Jersey+JPA+Hibernate+MySQL实现CRUD操作案例