Spring+JPA/Hibernate+Wicket アプリには、Criteria API を使用して型指定されたクエリを生成する DAO の 1 つで使用したい QueryBuilder Bean があります。
@Service(value="inboxQueryBuilder")
public class InboxQueryBuilder {
@PersistenceContext
EntityManager em;
CriteriaBuilder cb;
public InboxQueryBuilder() {
cb = em.getCriteriaBuilder();
}
public TypedQuery<App> getQueryForApps(AppSearchObject aso) {
...
}
...
}
ただし、アプリを実行すると、次の行でヌル ポインター例外が発生します。
cb = em.getCriteriaBuilder();
つまり、EntityManager は注入されません。なぜなのかご存知ですか?
また、これは正しくスレッドセーフですか、それともクエリごとに InboxQueryBuilder をインスタンス化する必要がありますか? その場合、EntityManager も注入する必要がありますか、それともコンストラクター パラメーターとして渡す必要がありますか (EntityManager のインスタンスが注入された DAO 内のクエリごとに InboxQueryBuilder がインスタンス化されます)。