2012-04-14 171 views
0

我对jpa有点新鲜。我创建了一些简单的查询。但是现在我有一个简单的查询问题。我有一个实体付款与3列(Id,金额1,金额2)。 现在我想从付款找到所有的行,其中Amount1 + AMOUNT2大于somevalue.I想是这样:jpa列上的算术运算查询

Query query = getEntityManager().createQuery(
    "Select p from Payment p WHERE p.Amount1 + p.Amount2 >' " + someamount +" ' "); 

但它无法正常工作。我也试过使用SUM,但那只是一列。 任何人都可以帮助我。 谢谢。

回答

0

假设你的实体正确定义,下面的查询应该只是罚款:

final BigDecimal threshold = BigDecimal.valueOf(1000); 
TypedQuery<Payment> query = getEntityManager().createQuery(
     "SELECT p FROM Payment p WHERE p.Amount1 + p.Amount2> :value", 
     Payment.class); 
query.setParameter("value", threshold); 
List<Payment> results = query.getResultList(); 
+0

是实体正确定义。因为我可以毫无问题地从单列中获取值。您创建的查询与我的查询相同。是不是?但那个不起作用。我在付款p选择p时收到错误EJB事务卷展栏WHERE p.Amount1 + p.Amount2> 200 – Jeena 2012-04-14 13:45:38

+1

事务回滚?除了简单的选择之外,你还在做其他方法吗?编辑您的问题以包括堆栈跟踪和任何其他正在使用相同方法执行的JPA操作。 – Perception 2012-04-14 13:50:21

+0

哦,那是我的错。我正在使用查询的结果而不检查它是否为null。但仍然没有得到任何结果与我张贴在第一篇文章的查询。 – Jeena 2012-04-14 14:01:56