我查询一个包含进程输入和输出版本号的表。
表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行:将谓词应用于标准。
我检查了每个方法调用的criteria
和query
,它们都包含正确的和预期的参数。
如果我调用此方法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 |
我在这里缺少什么?