小编cha*_*cha的帖子

Hibernate条件查询,子查询连接两列

我有一个表,"Quote",映射在hibernate中,它有一个整数id和日期的复合键,还有几个额外的列.我想编写一个条件查询,该查询使用DetachedCriteria来获取具有最大日期的每个id的行.

在sql中,我可能会编写一个类似的查询

SELECT * FROM Quote q1
  INNER JOIN (SELECT id, max(date) as maxdate FROM Quote
               GROUP BY id, date) q2
  ON q1.id = q2.id AND q1.date = q2.maxdate
Run Code Online (Sandbox Code Playgroud)

在hibernate中,我认为可以像这样为"group by"子查询创建一个DetachedCriteria(其中Quote是映射表的类,而"Qid"是键的复合id类,具有属性id和date,由a访问Quote类的"qid"属性):

DetachedCriteria maxDateQry = DetachedCriteria.forClass(Quote.class);
maxDateQry.setProjection(
    Projections.projectionList()
        .add(Projections.max("qid.date", "maxdate"))
        .add(Projections.groupProperty("qid.id")));
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何在标准查询中使用它,该查询等同于上面的sql的外部部分.我正在寻找一些类似的东西

Criteria criteria = session.createCriteria(Quote.class);
criteria.add(
    Restrictions.and(
        Property.forName("qid.id").eq(maxDateQry???),
        Property.forName("qid.date").eq(maxDateQry???)));
List<Quote> quoteList = criteria.list();
Run Code Online (Sandbox Code Playgroud)

上面的两个Property.forName将外表与子查询的相应列相关联.如果内连接只提供一个值,我只需给DetachedCriteria一个Projection并将DetachedCriteria直接传递给Property.forName(...).eq(..).我不确定如何在Projection中使用带有两个值(id和maxdate)的DetachedCriteria.

hibernate criteria detachedcriteria

13
推荐指数
1
解决办法
2万
查看次数

将函数对象传递给 std::function

我在使用函数对象创建 std::function 实例时遇到了一些麻烦。(我的环境是使用 Visual Studio 2015 的 C++ 11。)

首先,我有一个在我的函数对象的参数列表中使用的类。这是一个简化版本,说明了要点。

class X
{
public:
    void zz(int a) const
    {
        std::cout << "X:zz, a = " << a << "." << std::endl;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后是函数对象,它在其 operator() 方法中使用 X。

class Y
{
public:
    void operator()(const X& x)
    {
        x.zz(17);
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,我想将 Y 的实例包装在 std::function 中。函数的类型是 void(const X&),一个以对 X 的 const 引用作为参数的 void 函数。方法 Y:operator() 具有此签名。

void test_it
{
    X my_x;

    Y my_y;
    std::function<void(const X&)> f1(my_y);
    f1(my_x); // OK

    std::function<void(const X&)> f2(Y()); …
Run Code Online (Sandbox Code Playgroud)

c++ function functor

3
推荐指数
1
解决办法
562
查看次数

标签 统计

c++ ×1

criteria ×1

detachedcriteria ×1

function ×1

functor ×1

hibernate ×1