2016-12-29 2 views
0

Я пытаемся использовать методы в моей Spring Repository класса, как это:Repository запросы и сущности экземпляр имена переменных

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

С колонком Entity, определенным как это. Обратите внимание, что хотя я явно называю столбец «число», 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

Вы уверены, что используете «правильную» колонку '@ Column', вы импортируете правильную аннотацию !? – 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. Вы можете сгенерировать его через среду IDE.

+0

Правильно, я не хочу этого делать. – Rick

+0

Вы имеете в виду, что вы не хотите менять findByMNumber? –

+0

Я хочу написать «findByNumber», и я хочу оставить переменную-член «mNumber» и имя столбца «number». Кажется, это невозможно. – Rick

Смежные вопросы