2016-12-29 25 views
0

我試圖使用方法,我的春節庫類是這樣的:庫查詢和實體實例變量名

public 
interface 
ToolRepository extends Repository<Tool, Long> 
{ 
    public Tool findByNumber(String inNumber); 
} 

有了這樣定義的實體柱。請注意,雖然我明確指定了「數字」列,但Spring(或Hibernate)會看到實際的成員變量名稱「mNumber」,並且無法生成正確的查詢。

import javax.persistence.Column; 

@Entity 
@Table(name = "Tool") 
public 
class 
Tool implements Serializable 
{ 
    @Column(name = "number") protected Integer mNumber; 

    public Integer getNumber()     { return mNumber; } 
    protected void setNumber(Integer inVal) { mNumber = inVal; } 
} 

是否有一個註釋來指定Spring在解釋查詢時應該使用的名稱?

此代碼使用彈簧引導1.4.3.RELEASE構建,我使用的是Postgres。

+0

您確定您使用的是「正確的」@列,您是否導入了正確的註釋!? – luk2302

+0

@ luk2302,我正在使用javax.persistence.Column – Rick

+1

@Surace不應該被要求,它應該像OP期望的那樣工作。 – luk2302

回答

2

變化findBy以下幾點:

public interface ToolRepository extends Repository<Tool, Long> 
{ 
    public Tool findByMNumber(String mNumber); 
} 

如果更改參數名稱,然後你需要使用@Param註釋,並指定屬性的名稱。

參考: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

如果你不想改變方法名,使用@Query註釋:

public interface ToolRepository extends Repository<Tool, Long> 
{ 
    @Query("from Tool where mNumber = :number") 
    public Tool findByNumber(String number); 
} 

如果需要的話,產生getter和setter的mNumber。您可以通過IDE生成它。

+0

對,我不想那樣做。 – Rick

+0

你的意思是你不想改變findByMNumber? –

+0

我想寫「findByNumber」,我想離開成員變量「mNumber」和列名「數字」。看來這是不可能的。 – Rick