具有多列的Hibernate IN子句

Ang*_*gad 7 hibernate

需要知道如何构造一个Hibernate Query,它获取与IN包含多个列值的子句匹配的结果.

例如,

Query query=session.createQuery( "from entity e where (e.abc, e.xyz) in (:list)" );
query.setParameterList( "list", list );
Run Code Online (Sandbox Code Playgroud)

这里list将是一个2D数组,可以包含基本类型的基本包装器对象,例如Integer,String等等.

这可能吗?

Ang*_*gad 8

在这里我是如何实现这一点的.基本上我们需要在我们需要查询的列集中创建一个Hibernate组件(读取@Embeddable对象)并将其嵌入到主实体中.

列组可以组合如下:

@Embeddable
public class CompositeColumns{
  private String col1;
  private String col2;

  //Empty constructor is required by Hibernate for instantiation
  public CompositeColumns(){
  }

  public CompositeColumns(String col1, String col2){
            this.col1 = col1;
            this.col2 = col2;
      }

  @Column(name="COL1")
  public String getCol1(){
  }
  ...
  ... 
  //Rest of getters and setters
}
Run Code Online (Sandbox Code Playgroud)



将以上内容嵌入主实体类中,如下所示:

@Entity
public class MyEntity{
 @Id
 private Integer id;
 private String col3;
 private String col4
 @Embedded
 private CompositeColumns pairedCol1Col2;
 ...
 ...
 //Getters Setters

}
Run Code Online (Sandbox Code Playgroud)



该查询将如下所示:

List<CompositeColumns> cols = //get a list of CompositeColumns type

Query query=session.createQuery( "from MyEntity where pairedCol1Col2 in (:list)" );
query.setParameterList( "list", list );
Run Code Online (Sandbox Code Playgroud)


这样做了.

注意:我在Oracle数据库上运行它