Java 如何使用hibernate按列分组并检索所有列

Java 如何使用hibernate按列分组并检索所有列,java,hibernate,oracle10g,Java,Hibernate,Oracle10g,我继承了一个应用程序,该应用程序从Oracle数据库检索一些数据,然后将其转换为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_WH

我继承了一个应用程序,该应用程序从Oracle数据库检索一些数据,然后将其转换为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-以前没有不相关的_列,因此每个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;
}
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>
不相关_列中的信息不会以任何方式使用-因此检索到的确切记录不会以任何方式影响应用程序,我只需要确保只返回一条id为1的记录,并且只返回一条id为2的记录,依此类推


希望有足够的信息。提前感谢各位:

您可以使用以下查询:

在cte为的情况下,选择p.id、p.child\u id、按p.id划分的行数,按p.id排序作为记录中的RN,从cte中选择cte.id、cte.child\u id,其中RN=1


使用SQLQuery,您可以映射到实体。检查所有选项

我不确定您在尝试投影时到底尝试了什么。考虑到这一点,我建议您尝试:

query.add(Projections.property(Id)).add(Projections.property(Child_id)).add(Projections.property(Irrelevant_Column)).add(Projections.groupProperty(Id))
我想说的是,写这篇文章有多种方法。这个基本上相当于:

select id, child_id, irrelevant_column
from RecordInfo
group by id 
我们只使用值ID和CHILD\u ID-以前没有不相关的\u列,因此*每个ID都是唯一的*:在您的示例中,您既没有非唯一的ID,也没有对ID+CHILD\u ID;有什么不对劲吗?
query.add(Projections.property(Id)).add(Projections.property(Child_id)).add(Projections.property(Irrelevant_Column)).add(Projections.groupProperty(Id))
select id, child_id, irrelevant_column
from RecordInfo
group by id