2016-12-29 5 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); 
} 

を、mNumberのgetterとsetterを生成します。 IDEから生成することができます。

+0

そうですね、私はそれをしたくありません。 – Rick

+0

あなたはfindByMNumberに変更したくないという意味ですか? –

+0

"findByNumber"と書いて、メンバ変数 "mNumber"とカラム名 "number"のままにしたい。これは不可能なようです。 – Rick