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

新手上路,请多包涵

请注意,此代码确实适用于普通 Spring,但不适用于 Spring Boot(v1.3.3),我是否缺少某些东西,因为这是从有效的 spring 应用程序导入的。下面的代码来自 Spring Boot 应用程序

@Entity
@Table(name="project")
public class Project implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private int id;

    @Column(name="teamId")
    private int teamId;

    //private String Rentabiliteit;

    @Column
    //@Index(name="IProject_status",columnNames="Status")
    private String status;

    @Column
    //@Index(name="IProject_naam",columnNames="Naam")
    private String naam;
    //public Prototype m_Prototype;
    //public Team m_Team;

}

SQL

 CREATE TABLE IF NOT EXISTS `project` (
`id` int(11) NOT NULL,
`teamId` int(11) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`naam` varchar(255) DEFAULT NULL
 ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1;

错误

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
 Unknown column 'project0_.team_id' in 'field list'

编辑:Application.yml

 spring:

mvc:
  view:
    prefix: /WEB-INF/jsp/
    suffix: .jsp

datasource:
    url: jdbc:mysql://localhost:3306/oxyplast
    username: oxyplastuser
    password: oxyplastuserpw

jpa:
  properties:
    hibernate:
      current_session_context_class: org.springframework.orm.hibernate4.SpringSessionContext
      namingStrategy: org.hibernate.cfg.DefaultNamingStrategy

原文由 Thibault Lesuisse 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 460
1 个回答

自 Spring-Boot 1.4 起

从 1.4 开始,由于切换到 Hibernate 5,命名策略已经更新为 SpringPhysicalNamingStrategy 应该非常接近 1.3 的默认值。

也可以看看:


以前的版本

Spring Boot 提供了 ImprovedNamingStrategy 作为默认命名策略,这使得 Hibernate 搜索 team_id 列(从 int teamId 字段推断)。由于您的表中不存在此列,因此这是错误的原因。从休眠文档:

一种改进的命名策略,它更喜欢嵌入下划线而不是混合大小写名称

你有两个选择:

  1. 将列名明确地提供@Column(name="teamId") 。在早期的 Boot 版本中曾经有一个 错误,现在没有了。

  2. 更改 Spring Boot 属性中的命名策略 并告诉它使用 EJB3NamingStrategy ,它不会将camelCase 转换为snake_case,而是保持原样。

原文由 Aritz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进