2017-11-22 2 views
0

ich auf mit dem Kommando „IN“ auf mein JPQL einige problens hat, ist hier der Fall: Ich habe diese Klassen:Wie verwende ich den "IN" -Befehl richtig mit 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; 
} 

Dann habe ich diesen Dienst, die eine Liste der „TipoEmpresa“ sendet zu Abfrage meiner EmpresaRepository suchen:

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); 

Wie Sie sehen, ich versuche, alle „Empresa“ zu erhalten, die eine „tipoEmpresa“ aufgeführt auf meiner Liste, aber wenn colling der Service, den ich diesen Fehler:

java.sql.SQLException: Operand should contain 1 column(s) 

Ich weiß nicht, was zu tun, versuchte alles was ich denken konnte, was mache ich falsch?

Hallo Dude! Das Wichtigste zuerst, danke fürs Helfen!

. . .

versuchte ich g.Irani Vorschlag, meinen Code geändert, die wie folgt bekommen:

Repository

@Query(name = "SELECT E FROM Empresa E WHERE E.tipoEmpresa.id IN :tipoEmpresa ") 
List<Empresa> getEmpresasByTipoEmpresaAndTipoStatus(@Param("tipoEmpresa") List<Long> tipoEmpresa); 

Dienst

//just a test... 
List<Long> test =Arrays.asList(100l, 200l); 
List<Empresa> listaDeEmpresas=empresaRepository.getEmpresasByTipoEmpresa(test); 

Aber jetzt habe ich diese Fehlermeldung:

java.lang.IllegalArgumentException: Parameter value element [100] did not match expected type [br.com.entities.TipoEmpresa (n/a)] 

Irgendwelche Gedanken darüber?

Antwort

0

nach IN in WHERE-Klausel sollten Sie eine Liste mit 1 Spalte präsentieren.
tipoEmpresa in unter Abfrage des Codes ist eine Klasse (mit 2 Spalten)
@Query (name = "E FROM Empresa E SELECT WHERE E.tipoEmpresa IN (: tipoEmpresa)")
Sie
verwenden können @Query (name = "E aus E Empresa SELECT WHERE E.tipoEmpresa.id IN (: tipoEmpresaIDs)")
dann eine Liste von IDs tipoEmpresa vorbereitet und eingestellt auf: tipoEmpresaIDs

Hinweis, dass in JPA Wenn Sie IN verwenden, brauchen Sie() nach IN nicht. (nur verwenden ... IN: tipoEmpresaids)

+0

Hallo Alter, danke für die Hilfe, aber jetzt bekomme ich eine andere Fehlermeldung, ich habe meine Frage damit bearbeitet, haben Sie irgendwelche Ideen aboute es? – user3628479