当前位置: 首页 > 知识库问答 >
问题:

Spring数据似乎无法理解@列名

郭华美
2023-03-14

我使用Spring-boot 1.4.1.Release,使用Spring Data和Hibernate将一些数据持久化到MySQL数据库中。

我有这样一个类,respondent,用@entity注释,其中一个字段注释如下:

@Column(name = "firstName", nullable = false, length = 100)
private String firstName;

当我试图通过对其Crudrepository 调用save()将响应项保存到数据库时,我会得到以下错误:

ERRORcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'first_name' in 'field list'

这个错误在我为该字段添加@column注释之前就开始发生了,所以我认为将firstName映射到first_name是默认的Hibernate行为,但是我已经添加了@column注释,没有任何变化。还是错了吗?我已经用MVN clean package重新构建了应用程序

以下是我的答辩实体:

@Entity
public class Respondent {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @Column(name = "firstName", nullable = false, length = 100)
    private String firstName;
    private String tussenvoegsel;
    @Column(name = "lastName", nullable = false, length = 100)
    private String lastName;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "Company_id", nullable = false)
    private Company company;

共有1个答案

戚令秋
2023-03-14

默认情况下,Spring使用jpa.springNamingStrategy生成表名。

premednamingstrategy将把camelcase转换为snake_case,因为ejb3namingstrategy只使用表名不变。

您可以尝试将naming_strategy更改为:

spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy

对于Hibernate5,这应该是可行的(我不太确定您是否也需要上面的一个,但是两者都试试):

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
 类似资料:
  • 我有一个简单的web应用程序,我从应用程序的前端获取json。我有一个对象,它包含很少的属性和一个对象数组。 它看起来像这样: 我通过使用。我用向我的PHP-Laravel后端发送了一个请求,我想对它进行解析。 这就是我所拥有的: 我尝试像这样获取json数据: 但它就是不起作用。我总是遇到一个错误,我试图访问对象上的,但它不存在。我也试过这样做: 但是我也有同样的问题。我做错了什么,我看到了关于

  • 目前我只是第一次使用SQL,我一直在尝试向现有表中添加新的列,以实现学生注册之类的交易。 我在网上关注了一些教程,它们都指向了我到目前为止一直在尝试的内容,基本上是这样的: 根据我阅读的内容和观看的教程,它应该可以工作,但phpmyadmin会显示一条错误消息: 分析过程中发现1个错误。 无法识别的alter操作。(位置0的“”附近) 1064年的今天,您的SQL语法出现错误;查看与您的Maria

  • 我正在尝试使用两个线程将值添加到。我想要的是,当一个线程添加值时,另一个线程不应该干扰,所以我使用了 方法。但是,如果我不显式同步对象,则添加似乎是以不同步的方式完成的。 没有显式同步块: 我得到的输出是: 通过取消对显式synchronized块的注释,我在添加时停止了来自其他线程的干扰。一旦线程获得了锁,它就一直执行,直到完成。 取消注释同步块后的示例输出: 那么,为什么<code>集合会出现

  • 问题内容: 我正在尝试通过检查golang TCPConn.Write返回的错误来检测发送失败,但它为nil。我也尝试使用TCPConn.SetWriteDeadline,但没有成功。 事情就是这样发生的: 服务器启动 客户端连接 服务器发送一条消息,客户端收到它 客户端 关闭 服务器再发送一条消息:没有错误 服务器发送第三条消息:仅现在出现错误 问题 :为什么只有第二条消息发送给不存在的客户端会

  • 我有两个这样的域类。 我也有两门这样的Dto课。 所以我制作了一个映射器类StudentMapper,它扩展了GenericMapper。 但是我在编译Mapper时出错了。 " StudentDto没有可访问的构造函数." 这些代码有什么问题? 我希望学生是不可修改的。使用lombok和mapstruct的最佳方式是什么? 您可以从这里获得源代码。https://github.com/jangd

  • 我不能在我的服务课上用我的积垢。我可以创建存储库,但当我将其自动连接到我的服务类时,会出现以下错误: com中构造函数的参数0。测验服务testService需要“com”类型的bean。测验存储库。找不到TestRepository“”。 行动: 考虑定义COM类型的bean。测验存储库。配置中的TestRepository。 这对许多人来说似乎是一个大问题。我尝试了各种东西,如@Compone