-2

我在 SQL Server 2005 中有以下查询:

SELECT distinct(user.id_user), user.name, user.familyname from tbl_users users 
inner join tbl_notes notes on users.id_user = notes.id_user 
where notes.id_book = 1

我已经映射了所有必要的类,我需要使用 hibernate API 来编写它。到目前为止,我已经编写了以下代码,但它返回 null:

hibernateSession = HibernateUtil.getSessionFactory().openSession();
criteria = hibernateSession.createCriteria(TblUsers.class, "users")
        .createCriteria("users.id_user", "tblNotes")
        .add(Restrictions.eq("tblNotes.idBook", idBook));

criteria.setProjection(Projections.projectionList()
                .add(Projections.distinct(Projections.property("users.idUser")))
                .add(Projections.property("users.name"))
                .add(Projections.property("users.familyName")));

ret = criteria.list(); 
4

1 回答 1

1
Criteria c = session.createCriteria(User.class);
Criteria nc = c.createCriteria("notes", "note");
nc.add("bookId", 1);

ProjectionList pl = Projections.projectionList();
pl.add(Projections.distinct(Projections.property("userId")));
pl.add(Projections.property("name"));
pl.add(Projections.property("familyName"));
c.setProjection(pl);

List<Object[]> result = (List<Object[]>) c.list();

或者这种性质的东西。第二个“createCriteria”使用您定义的关系强制与 notes 表连接。由于您的 notes 表似乎与 User 有关系(通过 user_id 列),我假设您已经映射了它,以便 hibernate 可以弄清楚如何从 User 到 Note。此外,生成的 Criteria 对象允许您在要连接的音符上设置条件。

最后,我们简单地创建一个 ProjectionList 来枚举我们想要的投影。在这种情况下,我们需要 1 个不同的列以及 2 个其他列。

你会得到一个 Object[] 的列表。

我没有测试过这段代码,而且由于你没有发布你的课程,我不能 100% 确定所有内容都以这样的方式映射,你可以像这样进行连接。

于 2012-07-19T12:46:57.067 回答