我在使用突击队时遇到了一些问题" IN"在我的jpql上,这里是这样的: 我有这些课程:
public class Empresa{
@Id
@Column(nullable = false, unique = true)
@GeneratedValue
private Long id;
@JoinColumn(name = "id_tipo_empresa")
@OneToOne(cascade = CascadeType.DETACH)
private TipoEmpresa tipoEmpresa;
}
public class TipoEmpresa{
@Id
@Column(unique = true, nullable = false)
@GeneratedValue
private Long id;
private Long valor;
}
然后我有这个服务,发送一个" TipoEmpresa"到我的EmpresaRepository的查询:
SERVICE
public List<Empresa> getEmpresasByTipoEmpresaAndTipoStatus(List<TipoEmpresa>tiposEmpresa) {
List<Empresa> listaDeEmpresas=empresaRepository.getEmpresasByTipoEmpresa(tiposEmpresa);
return listaDeEmpresas;
}
REPOSITORY
@Query(name = "SELECT E FROM Empresa E WHERE E.tipoEmpresa IN(:tipoEmpresa)")
List<Empresa> getEmpresasByTipoEmpresaAndTipoStatus(@Param("tipoEmpresa") List<TipoEmpresa> tipoEmpresa);
正如你所看到的那样,我试图获得所有的&#34; Empresa&#34;有一个&#34; tipoEmpresa&#34;在我的列表中列出,但在整理服务时,我收到此错误:
java.sql.SQLException: Operand should contain 1 column(s)
我不知道该怎么做,尝试了我能想到的一切,我做错了什么?
嗨老兄!首先,感谢您的帮助!
。 。
我尝试了g.Irani的建议,改变了我的代码,就是这样:
存储库
@Query(name = "SELECT E FROM Empresa E WHERE E.tipoEmpresa.id IN :tipoEmpresa ")
List<Empresa> getEmpresasByTipoEmpresaAndTipoStatus(@Param("tipoEmpresa") List<Long> tipoEmpresa);
服务
//just a test...
List<Long> test =Arrays.asList(100l, 200l);
List<Empresa> listaDeEmpresas=empresaRepository.getEmpresasByTipoEmpresa(test);
但是现在我收到了这条错误消息:
java.lang.IllegalArgumentException: Parameter value element [100] did not match expected type [br.com.entities.TipoEmpresa (n/a)]
有什么想法吗?
答案 0 :(得分:0)
在WHERE子句中的IN之后,您应该显示一个包含1列的列表。
tipoEmpresa在下面查询你的代码是一个类(有2列)
@Query(name =“SELECT E FROM Empresa E WHERE E.tipoEmpresa IN(:tipoEmpresa)”)
你可以使用
@Query(name =“SELECT E FROM Empresa E WHERE E.tipoEmpresa.id IN(:tipoEmpresaIDs)”)
然后准备一份tipoEmpresa ID列表并设置为:tipoEmpresaIDs
请注意,在JPA中使用IN时,IN之后不需要()。 (只需使用... IN:tipoEmpresaIDs )