Question

J'utilise Spring Roo avec des couches de référentiel.J'ai deux cours :Document (avec le titre du document) et FilledDocument (qui contient le document associé).Comme ça:

public class Document {

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

public class FilledDocument {

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

Je voudrais créer un outil de recherche pour la classe FilledDocument qui correspond au titre à l'intérieur de l'attribut RelatedDocument.

J'utilise une solution qui n'est ni élégante ni efficace.Dans mon contrôleur j'ai :

@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";
}

je suis en train de lire ceci Spring Data JPA - Documentation de référence et j'essaye avec @Query dans la classe du référentiel, comme ceci :

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

mais ça ne marche pas.Des idées?

Était-ce utile?

La solution

Si vous utilisez Spring Data JPA 1.3.1 ou une version plus récente, vous pouvez simplement écrire :

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

Si vous êtes bloqué sur une ancienne version, votre code serait :

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

Et quand tu appelles le findFilledDocumentByTitleDocument méthode que vous devez réussir

"%"+title+"%"

comme argument.

Vérifier ce article de blog pour l'histoire complète et la section 1.3.4 de la Documentation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top