2016-08-19 29 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:未找到type屬性gamedate遊戲!」。在Entity和Query方法中將參數名稱更改爲「gameDate」後,它停止抱怨,並且實際上正在返回預期的條目。但與此同時,它不會從搜索查詢中的「game_date」列中返回值,該搜索查詢是Date類型的簡單常規列。我不知道這一切發生了什麼。

我正在使用的數據庫是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

下劃線是Spring數據JPA一個reserved keyword。它應該是足夠的,從你的財產,並從它的getter和setter和Hibernate刪除它會做休息:

@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變量和字段名,這是大小寫混合首先小寫。

參見:

+0

我還沒有發現我忘了改getter和setter。謝謝! – Anton

+0

請記住,如果有用,可以將問題標記爲已回答或向上投票;-) –