2016-10-15 8 views
0

私はHibernateを使い果たしていて、Hibernateを使ってプロジェクトを構築していますが、SessionFactoryのopenSessionメソッドを使ってSessionFactoryオブジェクトとSessionオブジェクトを作成しました。セッションオブジェクトを使用してCriteriaBuilderを作成してCriteriaQueryを作成するCriteriaAPIが廃止されて以来

HibernateのCriteria APIを使用しようとしているうちに、私が使用している5.2.3の最終版以降、廃止されていることが判明しました。

すでにSessionFactoryを使用しているため、EntityManagerFactoryを使用してEntityManagerオブジェクトを作成したくありません。 これは私がやったことです。確かに

--- 
try (Session session = HibernateUtil.getSessionfactory().openSession()) { 
     CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); 

     session.beginTransaction(); 

     CriteriaQuery<Transaction> criteriaQuery = criteriaBuilder.createQuery(Transaction.class); 

     Root<Transaction> root = criteriaQuery.from(Transaction.class); 

     criteriaQuery.select(root); 

     List<Transaction> transactions = session.createQuery(criteriaQuery).getResultList(); 


     for (Transaction transaction : transactions) { 
      System.out.println(transaction.getTitle()); 
     } 
--- 

これは、HibernateはJPAの上部と、それはEntityManagerを使用しただろう行うための最善の方法で構築されているようにそれを行うには最適な方法ではありません。 EntityManagerFactoryを作成しなくてもEntityManagerFactoryを作成しなければならないのではなく、前述のファクトリを使用してEntityManagerオブジェクトを作成するのであれば、他にも回避策がありますか?これは、プログラム設計に多くの変更を加えなければならないことを意味します。

+1

なぜ、すでに廃止されているものを習得し、EntityManagerを使用しないのはなぜですか?それはあなたの選択ですが、 'jpa 'でタグ付けしないでください。 – ujulu

+0

はい。私は後でそれがもはやサポートされない何かを使用し続けたいと思ったので、私はいくつかのプログラムデザインを変更する必要はありませんでした非常に間違ったアプローチでした。私は必要な変更を加え、EntityManagerを使用するように変更しました。ありがとう。 – NoobProgrammer

答えて

0

残念ながら、HibernateのCriteria APIを置き換えるAPIはありません。それについて説明している5.1 documentaionを参照してください。 また、SessionFactoryインスタンスを使用してクエリを処理することも考えましたが、EntityManagerを使用してプログラムでクエリを作成することをお勧めします。

関連する問題