问题
下面的代码,我们使用 Spring JPA 作为数据库访问层,并且用 @Table 和 @Column 定义了表和列名,但是 Hibernate 给出的 SQL 语句并没有使用我们定义的名称:
/**
* 节点
*/
@Entity
@Table(name = "Node")
@Data
public class Node {
@Id
@GeneratedValue
@Column(name = "ID")
private int id;
@Column(name = "ParentId")
private Integer parentId;
/**
* 企业编码
*/
@Column(name = "Code")
private String code;
@Column(name = "Name")
private String name;
@Column(name = "Description")
private String description;
@Column(name = "IsActive")
private boolean isActive;
}
Hibernate 给出的 SQL 语句并没有使用我们定义的名称:
我使用的是 PostgreSQL.
原因
Spring JPA 默认会把所有的名称转为小写,并且在大写字母前加上横线,比如 IsActive 翻译成 is-active
解决方案
我们应该使用 Hibernate 的命名规则,按照规则会使用 @Table 和 @Column 中的名字。在 properties 文件中加入如下规则:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
现在生成的 SQL 就是正确的了:
参考链接:
https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html