为了账号安全,请及时绑定邮箱和手机立即绑定

hibernate 生成错误的查询

hibernate 生成错误的查询

凤凰求蛊 2023-10-13 17:28:59
我是 hibernate 和 Data JPA 的新手。我尝试插入到我的表中,但休眠查询中有一些列在我的表中不存在,因此会抛出错误。实际上,一开始当我运行代码时,hibernate 将这些额外的列添加到我的表中,然后我将application.properties中的spring.jpa.hibernate.ddl-auto值更改为none,但现在当我从表中删除这些额外的列时,尝试插入新记录我看到这些列位于插入方法中。我的实体类@Entitypublic class Content {    @Id    @NotNull    @GeneratedValue    Integer id;    //this can be null if it is a question    @Column(name = "content_id")    Integer content_id;    @NotBlank @NotNull    @Column(name = "body")    String body;    @Column(name = "creationDate")    Timestamp creationDate;    @NotNull    @Column(name = "user_id")    Integer user_id;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public Integer getContent_id() {        return content_id;    }    public void setContent_id(Integer content_id) {        this.content_id = content_id;    }    public String getBody() {        return body;    }    public void setBody(String body) {        this.body = body;    }    public Timestamp getCreationDate() {        return creationDate;    }    public void setCreationDate(Timestamp creationDate) {        this.creationDate = creationDate;    }    public int getUser_id() {        return user_id;    }    public void setUser_id(Integer user_id) {        this.user_id = user_id;    }}
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

经过大量搜索和工作,我发现 hibernate 表列的命名约定是用下划线分隔单词,这就是我在 hibernate 生成的查询中看到这些列的原因。因此,如果您的类中有一个像creationDate这样的变量,hibernate会尝试转换为creation_date,这样当我在这个方法中更改所有列的名称时,问题就解决了。另外,dtype列是一种特殊的列,当许多类使用同一个表插入数据时,hibernate将创建它,这是因为为了区分哪个类在表中插入记录,并且hibernate以该类的名称提供其值班级。



查看完整回答
反对 回复 2023-10-13
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

但是您的内容实体中确实有 content_id 和creation_date,问题实体是从其扩展而来的



查看完整回答
反对 回复 2023-10-13
  • 2 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信