質問

私はリポジトリ層で Spring Roo を使用しています。私には 2 つのクラスがあります。Document (ドキュメントのタイトルを含む) と FilledDocument (関連ドキュメントを含む)。このような:

public class Document {

    /**
     */
    @NotNull
    private String titleDocument;
    ...
}

public class FilledDocument {

    /**
     */
    @OneToOne
    private Document relatedDocument;
    ...
}

属性relativeDocument内のタイトルに一致するクラスFilledDocumentのファインダーを作成したいと考えています。

エレガントでも効率的でもないソリューションを使用しています。私のコントローラーには次のものがあります:

@RequestMapping(params = "find", produces = "text/html")
public String findFilledDocumentsByTitleDocumentContaining(@RequestParam(value = "title", required = true) String title, Model uiModel) {

    LinkedList<FilledDocument> allFilledDocuments = new LinkedList<FilledDocument>();
    allFilledDocuments.addAll(filledDocumentService.findAllFilledDocuments());

    ArrayList<FilledDocument> filledDocuments=new ArrayList<FilledDocument>();

    for( FilledDocument filledDocument : allFilledDocuments ) {
        if( filledDocument.getRelatedDocument().getTitleDocument().toLowerCase().contains(title.toLowerCase()) == true ) {
            filledDocuments.add(filledDocument);
        }
    }       

    uiModel.addAttribute("filleddocuments", filledDocuments);
    return "filleddocuments/list";
}

私はこれを読んでいます Spring Data JPA - リファレンスドキュメント そして、次のようにリポジトリクラスで @Query を試しています。

@Query("select f from FilledDocument f where f.relatedDocument.titleDocument containing = ?1")
public ArrayList<FilledDocument> findFilledDocumentByTitleDocument(@Param("titleDocument") String titleDocument);

しかし、それは機能しません。何か案は?

役に立ちましたか?

解決

Spring Data JPA 1.3.1 以降を使用している場合は、次のように書くだけで済みます。

@Query("select f from FilledDocument f where f.relatedDocument.titleDocument like %:title%")
List<FilledDocument> findFilledDocumentByTitleDocument(@Param("title") String titleDocument);

古いバージョンで行き詰まっている場合、コードは次のようになります。

@Query("select f from FilledDocument f where f.relatedDocument.titleDocument like :title")
List<FilledDocument> findFilledDocumentByTitleDocument(@Param("title") String titleDocument);

そして、あなたが電話をかけると、 findFilledDocumentByTitleDocument 渡す必要があるメソッド

"%"+title+"%"

議論として。

チェックアウト これ 全文とセクションのブログ投稿 1.3.4ドキュメンテーション.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top