Spring JPA Hibernate无法自动生成ID H2表

时间:2020-04-14 22:54:22

标签: java hibernate spring-boot jpa h2

尝试使用自动生成的ID创建表时出现异常:

org.hibernate.tool.schema.spi.CommandAcceptanceException:“执行DDL时出错”创建表位置(id bigint不为null,说明varchar(255),num整数不为null,价格为小数(19,2),行char (255)不为空,主键(id))“通过JDBC语句”。

看起来生成的SQL无法识别'@GeneratedValue(strategy = GenerationType.TABLE)'注释。对于Hibernate或Adaptor来说,这似乎是一个非常普遍的问题。

现在,在您将此问题重复删除之前,我已经对所有q / a进行了类似的处理,并尝试了所有建议的解决方案。我还尝试自己生成ID密钥,并尝试将spring.jpa.properties.hibernate.hbm2ddl.auto设置为“删除创建”

application.properties

spring.datasource.driverClassName = org.h2.Driver
spring.datasource.username = sa
spring.datasource.password =
spring.jpa.properties.hibernate.hbm2ddl.auto=update

实体类

import java.math.BigDecimal
import javax.persistence.*

@Entity
data class Seat(
@Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="id")
                val id: Long,
                val row: Char,
                val num: Int,
                val price: BigDecimal,
                val description: String) {
    override fun toString(): String = "Seat $row-$num $$price ($description)"
}

服务构造器

constructor() {
        ...
        for (row in 1..15) {
            for (num in 1..36) {
                hiddenSeats.add(Seat(0, (row+64).toChar(), num, getPrice(row,num), getDescription(row,num) ))
            }
        }
    }

我尝试过的事情: -strategy = GenerationType.AUTO更改为.SEQUENCE和.TABLE -将此添加到application.properties:

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect

我尝试自己生成ID,但未成功。我一定是新手Kotlin,Spring Boot和Hibernate的用户,但是在这里碰壁了。请指教!

jdk-14,Spring Boot v2.2.6.RELEASE, 使用方言:org.hibernate.dialect.H2Dialect

1 个答案:

答案 0 :(得分:3)

这是问题.trueHeading,ROW是SQL中的保留字。更改该变量