为什么我的JPA条件查询为不同的参数返回相同的行

时间:2015-10-16 14:47:39

标签: java hibernate jpa hibernate-criteria criteria-api

我查询一个包含进程输入和输出版本号的表。

表ProcessVersion:

id |             name |      type | value |
---|------------------|-----------|-------|
 1 |         'entity' | 'OUT_VER' |     1 |
 1 | 'entityRelation' | 'OUT_VER' |     1 |

ID,名称和类型分别标识每一行。

示例DAO方法:

1    @Override
2    public ProcessVersion findByProperties(int id, String name, String type) {
3        em.getTransaction().begin();
4        
5        CriteriaBuilder cb = em.getCriteriaBuilder();
6        CriteriaQuery<ProcessVersion> criteria = cb.createQuery(ProcessVersion.class);
7        Root<ProcessVersion> genericProcessVersion = criteria.from(ProcessVersion.class);
8        Predicate idPred = cb.equal(genericProcessVersion.get(ProcessVersion_.id), id);
9        Predicate namePred = cb.equal(genericProcessVersion.get(ProcessVersion_.name), name);
10       Predicate typePred = cb.equal(genericProcessVersion.get(ProcessVersion_.type), type);
11       criteria.where(idPred, namePred, typePred); 
12       TypedQuery<ProcessVersion> query = em.createQuery(criteria);
13       ProcessVersion processVersion = query.getSingleResult();
14
15       em.getTransaction().commit();
16       return processVersion;
17   }

第8至10行:应用唯一参数 第11行:将谓词应用于标准。

我检查了每个方法调用的criteriaquery,它们都包含正确的和预期的参数。
如果我调用此方法n次,它将始终从第一个查询结果返回相同的ProcessVersion

方法调用#1

dao.findByProperties(1, 'entity', 'OUT_VER')

和方法调用#2

dao.findByProperties(1, 'entityRelation', 'OUT_VER')

都返回

id |             name |      type | value |
---|------------------|-----------|-------|
 1 |         'entity' | 'OUT_VER' |     1 |

我在这里缺少什么?

0 个答案:

没有答案