1
我想有可重複使用的CriteriaQuery
與此類似:帶參數線程安全的JPA2 CriteriaQuery是否可以創建查詢?
CriteriaBuilder b = cb();
CriteriaQuery<MyClass> query = b.createQuery(MyClass.class);
Root<MyClass> myClass= query.from(MyClass.class);
where.add(b.equal(applicant.get(MyClass_.id), b.parameter(Integer.class, "id")));
query.where(where.toArray(new Predicate[where.size()]));
return query;
現在工作線程池我想執行以下操作:
TypedQuery<MyClass > query = em.createQuery(myClassCriteria);
query.setParameter("id", id);
MyClass a = query.getSingleResult();
em.detach(a);
return a;
其中myClassCriteria
是CriteriaQuery
從上面。
是一個線程安全apporach?我懷疑,query
上的設置參數可以在內部修改給定的CriteriaQuery
,使其不具有胎面安全性。
我的懷疑來自偶爾應用程序拋出一些SQL錯誤說parameter 2 is not set
的情況。我什至不知道什麼參數2這裏是因爲我只有1 paremeter在查詢中,但這使得我的事情,以這種方式restruct parametrized查詢可以是非線程安全的。
錯誤不能按需重現,所以很難確定原因。
我的JPA提供者是Hiberate
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.1.Final</version>
</dependency>
這就是我的想法,但它看起來不然 - 也許是Hibernate idk中的一個錯誤。隨機錯誤消失了,因爲我使用了'ThreadLocal'。 –
Antoniossss