2016-08-19 14 views
0

Spring JPAを使用して残りのAPIにnamedqueryを使用しています。名前付きクエリは、私のエンティティクラスに実装されています。IllegalArgumentException:Springを使用したNamedQuery JPA

@Entity 
@Table(name="SPECIMEN_TB") 
@NamedQueries({ 
    @NamedQuery(name="SpecimenTb.findBySpecimenNo", query="select s from SpecimenTb s where s.specimenNo = :specimenNo"), 
}) 

public class SpecimenTb implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SPECIMEN_TB_ROWID_GENERATOR") 
    @Column(name="ROW_ID") 
    private long rowId; 

    @Column(name="SPECIMEN_NO", unique = true) 
    private String specimenNo; 

私のコントローラは次のようになります。

@RestController 
public class RistoreController { 
    @Autowired 
    private RistoreService ristoreService; 

    @RequestMapping(
      value = "/ristore/foundation/{specno}", 
      method = RequestMethod.GET, 
      produces = "application/json") 
    public ResponseEntity<SpecimenTb> getFmSpecimen(@PathVariable("specno") String specno) { 
     List<SpecimenTb> specimens = ristoreService.findBySpecimenNo(specno); 
     if (specimens == null) { 
      return new ResponseEntity<SpecimenTb>(HttpStatus.NOT_FOUND); 
     } 
     return new ResponseEntity<SpecimenTb>(specimens.get(0), HttpStatus.OK); 
    } 

私はJPAリポジトリfindBySpecimenNoメソッドを呼び出しサービスBeanを持っています。

@Service 
public class RistoreServiceBean implements RistoreService { 

    @Autowired 
    private SpecimenRepository specimenRepository; 

    @Override 
    public List<SpecimenTb> findAll() { 
     List<SpecimenTb> specimens = specimenRepository.findAll(); 
     return specimens; 
    } 

    @Override 
    public List<SpecimenTb> findBySpecimenNo(String specimenNo) { 
     List<SpecimenTb> specimens = specimenRepository.findBySpecimenNo(specimenNo); 
     return specimens; 
    } 

私はURLで春ブートアプリケーションおよびタイプを開始「http://localhost:8080/ristore/foundation/SKM1は」、私は次のエラーを得た:

java.lang.IllegalArgumentException: Parameter with that position [1] did not exist 

は私が間違って何をしたのですか?

答えて

2

私が読んだドキュメントに基づいて@NamedQueryという名前のパラメータを使用することはできません。代わりに?1で試しましたか?

名前付きパラメータが機能しないのは、メソッドパラメータにアノテーションを追加する必要があるため、どのパラメータがクエリのどのプレースホルダに一致するかを知るためです。

+0

ここで動作します。名前付きパラメータを機能させたい場合、「メソッドパラメータにアノテーションを追加する」必要がありますか? – ddd

+0

リポジトリのインターフェイス/クラスは表示されませんが、それは実行される場所です。 '@ Query'のspring-data-jpaドキュメントをチェックしてください。 –

関連する問題