2017-08-13 12 views
0

私の春のブートアプリケーションでは、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アノテーションを使用する理由thatsのが、エラーメッセージでは、Hibernateは列「ID」(ない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> 
+0

Spring + Hibernateには、 '@ Column'のようなアノテーションで指定したものを無視するいくつかのネーミングファクトリがあります。通常のJPAプロバイダは、そのように指定されたカラム名をそのまま使用し、使用しているカラム名を変更することはできません。これはJPA仕様を破るため、この設定が何であるかを調べる必要があります。 Stackoverflowにはそれに関する多くの記事があります。 –

+0

私はspring.jpa.hibernate.naming.physical-strategyとspring.jpa.hibernate.naming.implicit-strategyを見ていきます。なぜ列見出しに ''を使用していますか? – kimy82

+0

初めて検証するのではなく、作成するようにしてください。 DBに保存されているデータが失われるので注意してください。小文字の最初の手紙で既にデータベースを作成しましたか? –

答えて

0

すべての列名は小文字です

@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; 
} 

を試してみてください。

関連する問題