Pergunta

Eu estou usando o Spring Roo, com repositório de camadas.Eu tenho duas classes:Documento (com o título do documento) e FilledDocument (que contém o Documento relacionado).Como esta:

public class Document {

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

public class FilledDocument {

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

Eu gostaria de criar um localizador para a classe FilledDocument que a correspondência para o título de tributo relatedDocument.

Eu estou usando uma solução que não é elegante e eficiente.No meu controlador que eu tenho:

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

Eu estou lendo este Spring Data JPA - Documentação de Referência e eu estou tentando com @Consulta no repositório de classe, como este:

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

mas ela não funciona.Qualquer idéias?

Foi útil?

Solução

Se você estiver usando o Spring Data JPA 1.3.1 ou mais recente que você pode escrever :

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

Se você está preso em uma versão mais antiga, em seguida, o código seria:

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

E quando você chamar o findFilledDocumentByTitleDocument o método que você precisa para passar

"%"+title+"%"

como um argumento.

Confira este post no blog para toda a história e a seção 1.3.4 do documentação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top