2017-11-22 1 views
0

私はここの場合ですが、私のJPQLにコマンドー「IN」を使用して上のいくつかのproblensを抱えている: 私は、これらのクラスを持っている:JPQLで「IN」コマンドを正しく使うには?

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」のリストを送信し、このサービスを、持っています

SERVICE

public List<Empresa> getEmpresasByTipoEmpresaAndTipoStatus(List<TipoEmpresa>tiposEmpresa) { 
    List<Empresa> listaDeEmpresas=empresaRepository.getEmpresasByTipoEmpresa(tiposEmpresa); 
    return listaDeEmpresas; 
} 

リポジトリ

@Query(name = "SELECT E FROM Empresa E WHERE E.tipoEmpresa IN(:tipoEmpresa)") 
List<Empresa> getEmpresasByTipoEmpresaAndTipoStatus(@Param("tipoEmpresa") List<TipoEmpresa> tipoEmpresa); 
:私のEmpresaRepositoryのクエリへ

あなたは私のリストに記載されている「tipoEmpresa」を持っているすべての「Empresaメール」を取得しようとしている見ることができますが、サービスは、私はこのエラーを取得するときcolling通り:

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

WHERE句のINの後に、1列のリストを表示する必要があります。あなたのコードのクエリ以下で
tipoEmpresa(2列で)クラスである
@query(名前は= "E.tipoEmpresa IN(EmpresaメールEからEを選択:tipoEmpresa)")
あなたが
を使用することができます @query(名= "E.tipoEmpresa.id IN(EmpresaメールEからEを選択:tipoEmpresaIDs)")
次いでtipoEmpresa IDのリストを作成し、次のように設定します。tipoEmpresaIDs

通知JPAにおいて、そのINを使用する場合、INの後に()は必要ありません。 (ちょっと使ってください... IN:tipoEmpresaIDs

+0

こんにちは、助けてくれてありがとうございましたが、今は別のエラーメッセージが表示されています。私はそれで私の質問を編集しました。 – user3628479