2010-12-03

Read-Only entity for JPA

開發系統時會有一些只有Query 不會去 modify 的db query . 在jpa 中 每一個entity 產生後都是會被 managed. 所以, 要怎樣作到 不會被 managed 來造乘Query locked. 在Pro JPA 2 page.191 有提到一個 Optimizing Read-Only Queries 提到兩種方式 :
1. Outside of a Transaction : 將 entity query 的程式段落, 不要包涵在transaction 中. 但是對於 application-managed or extends entity managers 就不是用了.
2. 將Query 封裝在一個 stateless session facade , 在method 宣告 NOT_SUPPORTED. 只要執行到這一個method code, 任何 transaction 都會被 suspended. 已達到read-only 最佳化.

@Stateless
public class QueryServiceBean implements QueryService {
@PersistenceContext(unitName="EmployeeService")
EntityManager em;

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<Department> findAllDepartmentsDetached() {
return em.createQuery("SELECT d FROM Department d",
Department.class)
.getResultList();
}

// ...
}

沒有留言:

張貼留言