Frage

Ich verwende Spring Roo mit Repository-Ebenen.Ich habe zwei Klassen:Document (mit dem Titel des Dokuments) und FilledDocument (das das zugehörige Dokument enthält).So was:

public class Document {

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

public class FilledDocument {

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

Ich möchte einen Finder für die Klasse FilledDocument erstellen, der mit dem Titel innerhalb des Attributs relatedDocument übereinstimmt.

Ich verwende eine Lösung, die weder elegant noch effizient ist.In meinem Controller habe ich:

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

Ich lese das Spring Data JPA – Referenzdokumentation und ich versuche es mit @Query in der Repository-Klasse, etwa so:

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

aber es funktioniert nicht.Irgendwelche Ideen?

War es hilfreich?

Lösung

Wenn Sie Spring Data JPA 1.3.1 oder neuer verwenden, können Sie einfach schreiben:

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

Wenn Sie bei einer älteren Version nicht weiterkommen, wäre Ihr Code:

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

Und wenn Sie anrufen findFilledDocumentByTitleDocument Methode, die Sie bestehen müssen

"%"+title+"%"

als Argument.

Kasse Das Blogbeitrag für die ganze Geschichte und den Abschnitt 1.3.4 des Dokumentation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top