2016-08-19 4 views
0

エンティティのパラメータ名に "_"文字が含まれているため、春にカスタムクエリを作成する際に問題が発生しています: "game_date"Spring JPA + CRUD - カスタムクエリは_文字を許可していませんか?

私のテーブルには、「game_date」という名前の列もあります。

私は方法以下の作成した:

List<Games> findByGame_dateAndOpponent(@Param("game_date") Date game_date, @Param("opponent") String opponent);

が、私は私のアプリを起動したとき、それは一種の例外を除いてクラッシュだ:「org.springframework.data.mapping.PropertyReferenceException:タイプが見つかりませんプロパティgamedateをゲーム!"。 EntityメソッドとQueryメソッドの両方で "gameDate"にパラメータ名を変更した後、それは不平を停止し、実際に予想されるエントリを返しています。しかし、同時に、Date型の単純な通常の列である検索クエリでは、 "game_date"列から値を返しません。私はこのことで何が起こっているのか分かりません。

DB私はMySqlを使用しています。

エンティティ:

import java.util.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

@Entity 
@Table(name = "games") 
public class Games { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id_game") 
    private int id; 

    @Column(name = "game_date", columnDefinition = "DATE") 
    @Temporal(TemporalType.DATE) 
    private Date gameDate; 

    public Date getGame_date() { 
     return gameDate; 
    } 

    public void setGame_date(Date _game_date) { 
     this.gameDate = _game_date; 
    } 
} 

とリポジトリ:

import java.sql.Date; 
import java.util.List; 

import org.springframework.data.repository.CrudRepository; 
import org.springframework.data.repository.query.Param; 
import org.springframework.data.rest.core.annotation.RepositoryRestResource; 

@RepositoryRestResource 
public interface GamesRepository extends CrudRepository< Games , Integer > { 

    List<Games> findById(@Param("id") int id); 
    List<Games> findAll(); 
    List<Games> findByGameDateAndOpponent(@Param("game_date") Date game_date, @Param("opponent") String opponent); 

} 

答えて

1

アンダースコアが春データJPAでreserved keywordある

ここでは、コード自体が付属しています。 、

@Entity 
@Table(name = "games") 
public class Games { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id_game") 
    private int id; 

    //Getter and setters for id 

    @Column(name = "game_date") 
    private Date gameDate; 

    public Date getGameDate() { 
     return gameDate; 
    } 

    public void setGameDate(Date gameDate) { 
     this.gameDate = gameDate; 
    } 
} 

また、一般的には、変数名とフィールド名のためjava naming conventionを使用しようと混合した場合である:あなたの財産から、そのゲッターとセッターからそれを削除すると、Hibernateは残りを行います十分なはずです最初は小文字。

も参照してください:

+0

私は気づいていない私はゲッターとセッターを変更するのを忘れて...ありがとう! – Anton

+0

質問を回答したものとしてマークするか、有益な場合はそれをupvoteすることができます –

関連する問題