0
在我的spring引導應用程序中,我試圖將sql-server表映射到實體。架構驗證:表中缺少列[id]
@Entity(name="Employee")
@Table(name = "`Personels`")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="`Id`")
private Long id;
@Column(name="`Name`")
private String name;
@Column(name="`Surname`")
private String surname;
...
}
在表中的列開始用大寫字母,這就是爲什麼我使用@Column批註這一點,但在錯誤消息它說,休眠找不到列「ID」(未標識)。
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing column [id] in table [personels]
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:85) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
這裏是我的application.properties文件
spring.datasource.url=jdbc:sqlserver://xxx.xxx.xx.xx;databaseName=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.hibernate.ddl-auto = validate
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
這裏是POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.xxx.yyy.Application</start-class>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
</dependencies>
Spring + Hibernate有一些命名工廠,它忽略了在'@ Column'之類的註釋中指定的內容;任何普通的JPA提供者都應該簡單地使用像這樣指定的任何列名,而不是改變它,而不是使用你正在使用的。這打破了JPA規範,所以你必須仔細研究這個設置。有關於它的Stackoverflow上有很多帖子。 –
我會看看spring.jpa.hibernate.naming.physical-strategy和spring.jpa.hibernate.naming.implicit-strategy。你爲什麼在列註釋中使用''? – kimy82
儘量不要第一次驗證,而要創建。要小心,因爲你會丟失你的數據庫中存儲的數據。你是否已經用小寫的第一個字母創建了你的分貝? –