需要知道如何构造一个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等等.
这可能吗?
在这里我是如何实现这一点的.基本上我们需要在我们需要查询的列集中创建一个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数据库上运行它
| 归档时间: |
|
| 查看次数: |
5963 次 |
| 最近记录: |