小编gad*_*don的帖子

如何使用JPA Criteria API解决Oracle的'rownum'伪列?

我想使用JPA Criteria从数据库获取第一行.我使用JPA,Hibernate 4.2.7.在SQL中,语句如下所示:

SELECT * FROM houses WHERE rownum = 1;
Run Code Online (Sandbox Code Playgroud)

我的Java代码看起来像:

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<House> query = builder.createQuery(House.class);
    Root<House> root = query.from(House.class);

    query.select(root).where(builder.equal(root.get("rownum"), 1));

    TypedQuery<House> tQuery = entityManager.createQuery(query); 
    House house = tQuery.getSingleResult();
Run Code Online (Sandbox Code Playgroud)

但'rownum'伪列无法解决,我得到例外:

 java.lang.IllegalArgumentException: Unable to resolve attribute [rownum] against path
at org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:120)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:229)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:200)
Run Code Online (Sandbox Code Playgroud)

是可能的,如果是的话,如何使用Criteria API获得'rownum'伪列?谢谢你的任何建议.

java hibernate jpa

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

使用System.arraycopy复制到ArrayList时获取异常,gets:ArrayStoreException:null

我在尝试复制两个数组时遇到了一些麻烦.考虑以下简单代码:

    ArrayList<Integer> t1 = new ArrayList<Integer>();
    Integer i1 = new Integer(1);
    Integer i2 = new Integer(2);
    t1.add(i1);
    t1.add(i2);

    ArrayList<Integer> t2 = new ArrayList<Integer>();
    System.arraycopy(t1, 0, t2, 0, t1.size());
Run Code Online (Sandbox Code Playgroud)

控制台显示:java.lang.ArrayStoreException:null.这段代码可能有什么问题,或者我怎么能以不同的方式做到这一点.抱歉可能是一个简单的问题,但我已经坚持了几个小时,无法解决它.

java arrays arraylist

4
推荐指数
1
解决办法
4303
查看次数

使用std :: for_each lambda函数的错误

我有一点问题,我无法弄清楚为什么这段代码不起作用:

std::for_each(users.begin(), users.end(), [](Wt::WString u)
{
    std::cout << "ilosc: " << users.size() << std::endl;
    userBox_->addItem(u);
});
Run Code Online (Sandbox Code Playgroud)

编译时得到的错误:

GameWidget.cpp: In lambda function:
GameWidget.cpp:352:30: error: 'users' is not captured
GameWidget.cpp:353:4: error: 'this' was not captured for this lambda function
GameWidget.cpp: In member function 'virtual void GameWidget::updateUsers()':
GameWidget.cpp:354:3: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
GameWidget.cpp:354:4: error: no matching function for call to 'for_each(std::set<Wt::WString>::iterator, std::set<Wt::WString>::iterator, GameWidget::updateUsers()::<lambda(Wt::WString)>)'
GameWidget.cpp:354:4: note: candidate is:
In file included from /usr/include/c++/4.7/algorithm:63:0,
                 from GameWidget.h:11,
                 from …
Run Code Online (Sandbox Code Playgroud)

c++ boost wt c++11

4
推荐指数
1
解决办法
5078
查看次数

标签 统计

java ×2

arraylist ×1

arrays ×1

boost ×1

c++ ×1

c++11 ×1

hibernate ×1

jpa ×1

wt ×1