【发布时间】:2015-03-04 19:56:08
【问题描述】:
假设我有一些类,像这样:
OpA extends Operation
OpA1 extends OpA
OpA2 extends OpA
OpB extends Operation
OpB1 extends OpB
OpB2 extends OpB
OpB3 extends OpB
OpC extends Operation
Operation
|
/-----------------------------\
/ | \
OpA OpB OpC
/ |
/ |
/------\ /-----------\
/ \ / | \
OpA1 OpA2 OpB1 OpB2 OpB3
如果我想找到一些操作,我可以这样做:
session.createCriteria(Operation.class)
.add(...)
.add(...)
.addOrder(...)
.setFirstResult(...)
.setMaxResults(...)
.list();
但是,如果我不想将这些标准应用于 Operation.class 类型的所有操作,而仅应用于以下类型的操作:OpA2 + OpB1 + OpB3 + OpC?
我的问题:我怎样才能只使用 Hibernate Criteria 呢?请不要使用 HQL。
注意:我不知道我是否应该将此问题视为“查询多个类”(其中所有字段的名称与我正在查询的字段名称相同),或者我是否应将其视为“通过子类列表限制查询”。
编辑:如果我可以创建一个接口TheOnesIWant,然后使类OpA2、OpB1、OpB3 和OpC 实现这个接口,这将产生结果我想要:session.createCriteria(TheOnesIWant.class) 但我不能这样做,因为我只知道我想在 runtime 查询的类。上面的类层次结构只是一个例子。
【问题讨论】:
-
你能写一个简单的 sql 来描述你想要什么考虑这些类作为表。
-
对不起,我不知道怎么做。
-
你能不能创建一个接口,“Criteriable”,只有那些你想应用标准来实现的类?那么 session.createCriteria(Criteriable.class) 呢?我从来没有试过这个,但它首先想到的是:)
-
我不能,因为我需要的类在运行时一直在变化。
-
您只想在 1 个命令中创建此条件?考虑到所有类都实现了 Operation,您可以为每个类创建一个条件,并将所有列表放在一起返回。
标签: java hibernate hibernate-criteria