请注意,此代码确实适用于普通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
从1.4版本开始
从1.4开始,因为切换到hibernate5日,命名策略已经更新到SpringPhysicalNamingStrategy这应该是非常接近 1.3的默认值。
SpringPhysicalNamingStrategy
也可以看看:
以前的版本
Spring Boot提供了ImprovedNamingStrategy默认的命名策略,该策略使Hibernate搜索team_id列(从int teamId字段推断)。由于此列在您的表中不存在,因此是错误的原因。从Hibernate文档中:
ImprovedNamingStrategy
team_id
int teamId
一种改进的命名策略,它首选使用嵌入式下划线而不是大小写混合的名称
您有两种选择:
将列名显式提供 为@Column(name="teamId")。在早期的Boot版本中曾经有一个bug,现在不再存在。
@Column(name="teamId")
*在Spring Boot属性中 *更改命名策略 ,并告诉它使用EJB3NamingStrategy,这不会将camelCase转换为snake_case,而是保持原样。
EJB3NamingStrategy