为啥h2没有找到一列

Posted

技术标签:

【中文标题】为啥h2没有找到一列【英文标题】:Why h2 not found a column为什么h2没有找到一列 【发布时间】:2021-03-15 23:35:47 【问题描述】:

我有以下问题

原因:org.h2.jdbc.JdbcSQLSyntaxErrorException: Kolumna 未找到“CREATED_AT”列“CREATED_AT”; SQL 语句:插入 taco (id, created_at, name) 值 (null, ?, ?) [42122-200]

但在 h2 控制台中存在该列

我有以下 schema.sql 代码

create table if not exists Taco(
id identity,
name varchar(50) not null,
createdAt timestamp not null
);

和域

package my.taco.models;

import lombok.Data;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;

@Data
@Entity
public class Taco 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @NotNull
    @Size(min=5,message = "Nazwa musi składać się z przynajmniej pięciu znaków")
    private String name;

    private Date createdAt;

    @ManyToMany(targetEntity = Ingredient.class)
    @Size(min=1,message = "Musisz wybrac przynajmniej jeden składnik")
    private List<Ingredient> ingredients;

    @PrePersist
    void createdAt()
        this.createdAt=new Date();
    

那怎么了?

【问题讨论】:

【参考方案1】:

Hibernate 猜测的默认列名(根据属性名)是CREATED_AT,但你的是CREATEDAT

您可以重命名数据库中的列(推荐,因为它更标准),也可以像这样将列名指定为 Hibernate:

@Column(name="CREATEDAT")
private Date createdAt;

【讨论】:

以上是关于为啥h2没有找到一列的主要内容,如果未能解决你的问题,请参考以下文章

为啥 BigQuery 没有删除列的选项?

下面代码的输出应该是绿色的,对于 h2 标签,但它是正常的黑色,为啥?

对没有标题和第一列的csv文件中的行进行排序

为啥 Google BigQuery 在使用视图时没有正确使用分区日期

使用 EclipseLink 的 H2 数据库出现问题(即使没有错误,程序也不会更改数据库)

为啥 Qt Creator 找到 typedef,但没有找到构建过程?