我正在使用JHipster来生成一个应用程序。我有这张地图:Arquivo与Tabela有OneToMany关系。 Tabela与Campo有OneToMany关系。
Arquivo有一个名为“versao”的属性(字符串)。我想做的事情如下:
Page<Campo> findAllByArquivoVersao(String versao, Pageable pageable);
但是我收到了这个错误:
无法为方法public abstract org.springframework.data.domain.Page br.com.app.repository.CampoRepository.findAllByArquivoVersao(java.lang.String,org.springframework.data.domain.Pageable)创建查询!没有找到类型Campo的物业arquivoVersao!
我能够做像findAllByTabelaId这样的事情...所以我的映射是可以的。如何通过父母父母的属性进行查询过滤?
选项1
从ArquivoRepository
找到你的Arquivo by Versao,然后给每个人打电话给arquivo.getTabelas()
和getCampos()
,以获得你想要的露营地。
选项2
在@Query
中定义自己的CampoRepository
,如下所示:
@Query("select c from Campo c where c.tabela.arquivo.versao = :versao")
Page<Campo> findAllByArquivoVersao(@Param("versao") String versao, Pageable pageable);
如果你想通过部分比较他们的Campos
versao
,你可以这样做:
@Query("select c from Campo c where upper(c.tabela.arquivo.versao) like concat('%',upper(:versao),'%')")
Page<Campo> findAllByArquivoVersao(@Param("versao") String versao, Pageable pageable);
如果不确切知道你如何设计你的实体(取物,可空性......),这就像我猜的那样多。
我没有测试任何这段代码。
我知道了。 Spring docs关于4.4.3项规定了这种情况:
我必须这样命名我的接口方法:findByTabelaArquivoVersao