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:
current_session_context_class: org.springframework.orm.hibernate4.SpringSessionContext
namingStrategy: org.hibernate.cfg.DefaultNamingStrategy
回答:
从1.4开始,因为切换到hibernate5日,命名策略已经更新到SpringPhysicalNamingStrategy
这应该是非常接近
1.3的默认值。
- spring的命名策略
Spring
Boot提供了ImprovedNamingStrategy
默认的命名策略,该策略使Hibernate搜索team_id
列(从int
teamId字段推断)。由于此列在您的表中不存在,因此是错误的原因。从Hibernate文档中:
一种改进的命名策略,它首选使用嵌入式下划线而不是大小写混合的名称
您有两种选择:
为
@Column(name="teamId")
。在早期的Boot版本中曾经有一个bug,现在不再存在。,并告诉它使用
EJB3NamingStrategy
,这不会将camelCase转换为snake_case,而是保持原样。
以上是 Spring Boot的Hibernate字段命名问题(命名策略) 的全部内容, 来源链接: utcz.com/qa/416713.html