我继承了一个应用程序,该应用程序从 Oracle DB 检索一些数据,然后将其转换为 XML 以供另一个应用程序导入。为什么需要以这种方式完成的原因有点冗长,但简而言之,我们有一个看起来像这样的数据库:
ID | CHILD_ID | IRRELEVANT_COLUMN
1 | 100 | A
2 | 200 | E
2 | 200 | B
3 | 300 | G
3 | 300 | ZZ
3 | 300 | WHO_KNOWS_WHAT_MIGHT_END_UP_HERE
我们只使用值 ID 和 CHILD_ID - 以前没有 IRRELEVANT_COLUMN,因此每个 ID 都是唯一的,并且使用以下代码从数据库中检索数据:
public static List<RecordInfo> getRecordInfo() {
List<RecordInfo> recordInfo = null;
Session session = HibernateUtils.getSessionFactory().openSession();
try {
recordInfo = session.createCriteria(RecordInfo.class)
.list();
}
catch (Exception e) {
logger.error("Error reading database", e);
}
return recordInfo;
}
记录信息.java:
public class RecordInfo {
private Long id;
private Event event;
private Integer childId;
//Snip - Public Getters and Setters below.
}
RecordInfo.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hewhowas.model.RecordInfo" table="NIGHTMARE_TABLE" lazy="false">
<id name="id" type="long" column="ID">
<generator class="native"/>
</id>
<property name="childId">
<column name="CHILD_ID"/>
</property>
<many-to-one name="event" class="com.hewhowas.model.Event" column="CHILD_ID" fetch="join"/>
</class>
我尝试使用 Projections 按 ID 对数据进行分组 - 但随后它只检索列 ID 而没有其他内容 - 并且在尝试强制转换检索 RecordInfo 对象时出现强制转换异常。
有什么方法可以使用 Criteria 和 Projections 来返回类似于以下内容的结果集:
ID | CHILD_ID | IRRELEVANT_COLUMN
1 | 100 | A
2 | 200 | B
3 | 300 | WHO_KNOWS_WHAT_MIGHT_END_UP_HERE
“IRRELEVANT_COLUMN”中的信息没有以任何方式使用 - 所以检索到的确切记录不会以任何方式影响应用程序,我只需要确保只返回一个 id 为 1 的记录,并且只有一个返回 id 为 2 的记录,依此类推。
希望有足够的信息。在此先感谢各位:)