我正在使用Spring Roo和存储库层。我有两个类:Document(带文档标题)和FilledDocument(包含相关文档)。像这样:
public class Document {
/**
*/
@NotNull
private String titleDocument;
...
}
public class FilledDocument {
/**
*/
@OneToOne
private Document relatedDocument;
...
}
我想为FilledDocument类创建一个与atribute relatedDocument内部的title匹配的查找程序。
我使用的解决方案并不优雅高效。在我的控制器中,我有:
@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 - Reference Documentation,我正在尝试使用@Query在存储库类中,如下所示:
@Query("select f from FilledDocument f where f.relatedDocument.titleDocument containing = ?1")
public ArrayList<FilledDocument> findFilledDocumentByTitleDocument(@Param("titleDocument") String titleDocument);
但它不起作用。有什么想法吗?
答案 0 :(得分:0)
如果您使用的是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+"%"
作为论据。
查看this博客文章,了解完整故事和documentation的1.3.4
部分。