2017-06-13 15 views
0

こんにちは私は私のSpring-boot-JPA-Hibernateクラスに混乱しているエラーがあります。jpa hibernate mysql query broken

JPA Daliツールを使用して、自分のSQLスキーマからEntityクラスを作成しました。 (Spring-boot-jpa/hibarnateを使用して)それらを使用している間、私は匹敵しないクエリにいくつかの奇妙な問題があります。

プロパティ:

hibernate.dialect=org.hibernate.dialect.MySQLDialect 
spring.jpa.hibernate.ddl-auto=none 
spring.datasource.url=jdbc:mysql://localhost:3306/users 
spring.datasource.username=root 
spring.datasource.password=root 

エンティティ:

@Entity 
@Table(name="n_user") 
@NamedQuery(name="NUser.findAll", query="SELECT n FROM NUser n") 
public class NUser implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private int id; 

    private String imageUrl1; 

    private String name_first; 


    public NCaterer() { 
    } 

    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 


    public String getImageUrl1() { 
     return this.imageUrl1; 
    } 

    public void setImageUrl1(String imageUrl1) { 
     this.imageUrl1 = imageUrl1; 
    } 

    public String getName_first() { 
     return this.name_first; 
    } 

    public void setName_first(String name_first) { 
     this.name_first = name_first; 
    } 

} 

リポジトリ:ここ は一例であり

public interface UserRepo extends CrudRepository<NUser, Long> { 

} 

しかし、Hibernateは、それのこのクエリを作成します。

Hibernate: 
    /* select 
     generatedAlias0 
    from 
     NUser as generatedAlias0 */ select 
      nuser0_.id as id1_0_, 
      nuser0_.image_url1 as image_ur2_0_, 
      nuser0_.name_first as name_firs3_0_ 
     from 
      n_user nuser0_ 

ここでの問題は、image_url1です。これは、エンティティクラスで説明されているようにimageurl1である必要があります。これはいくつかの点で発生します。

なぜHibernateはCamelCase getterをクエリでcamel_caseに変換するのですか?そして私はそれをしないように設定することができますか?

+0

は、あなたが列名を入れて試すことができます。問題が発生した場合は例外を設定します。 – yogidilip

答えて

0

独自のフィールド名を指定する場合は、フィールドに@Column注釈を使用します。

例:以下示唆したように

@Column(name = "imageUrl1") 
private String imageUrl1; 
@Column(name = "nameFirst") 
private String name_first; 
+0

NamedQueryはテーブル名ではなくJava Pojo名用に書かれています。彼の質問は 'NUser'の部分に当てはまります。 – yogidilip

+0

@yogidilip申し訳ありません、 – solomkinmv

+0

ありがとうございました。それはかなりまっすぐ進むのに役立ちます:) –

0

さまざまな状況で同じ問題が発生している人が多かったようです。たぶん、下記の異なる命名戦略で行くと見て:

Naming Strategy One

Naming Strategy Two

Naming Strategy Three

あなたはしかし、あなたの休止状態の設定を変更することができます。その点については、hereをご覧ください。または、このpostを見て、誰かが上記の方法を使ってどのように変更したかを見てください。

+0

はい、私はすでにそれのいくつかを発見しました。ありがとう、私は最初の方法でそれを見つけるのに問題があった理由を知らない。 ありがとう! –