2016-03-21 18 views
1

Oracle veritabanı için 2.5 sürümü ile bir API üzerinde çalışıyorum. Şimdi oyunda JPA için özelliklerde yapıyı kullanmaya çalışıyorum. Bu anda, numaralı "Bu iş parçacığına hiçbir EntityManager bağlanmadı" hatasını alıyorum. Bu çağrıyı JPAApi.withTransaction'da sarmayı deneyin veya HTTP içeriğinin bu iş parçacığına kurulduğundan emin olun. " . Bu, gerçek çağrıdan sorumlu olan koddur. Benim JPA aramalar için oyunun inşa özelliklerini nasıl kullanabileceğiniziFarklı aramalarımın her biri için bir varlık yöneticisi fabrikası oluşturmadan JPA'yı oyun 2.5 ile nasıl kullanabilirsiniz?

package actors.protocols; 

import akka.japi.Option; 
import model.DTO.AanleverAfspraakVO; 
import model.domain.AanleverAfspraakDO; 
import play.db.jpa.JPA; 
import play.db.jpa.Transactional; 

import javax.persistence.EntityManager; 
import javax.persistence.Query; 
import java.util.Collection; 


public class AanleverAfspraakActorProtocol implements Protocol { 

public static class GetAanleverAfspraakByID{ 
    private int id; 

    public GetAanleverAfspraakByID(int id){ 
     this.id = id; 
    } 

    /** 
    * Get AanleverAfspraak by id 
    * @return AanleverAfspraakVO or null 
    */ 
    @Transactional 
    public Option<AanleverAfspraakVO> getAanleverAfspraakById(){ 
     final EntityManager entityManager = JPA.em().getEntityManagerFactory().createEntityManager(); 
     final Query query = entityManager.createNamedQuery("findbyid"); 
     query.setParameter("id", id); 
     final Collection<AanleverAfspraakDO> resultset = query.getResultList(); 
     final Option<AanleverAfspraakVO> response; 
     Option<AanleverAfspraakVO> response_value = Option.none(); 
     System.err.println("Size: " + resultset.size()); 
     if(!resultset.isEmpty()){ 
      try{ 
       AanleverAfspraakDO aanleverAfspraakDO = resultset.iterator().next(); 
       response_value = Option.some(this.convertAanleverAfspraakBOToVO(aanleverAfspraakDO)); 
      }catch(Exception e){ 
       response_value = Option.none(); 
       e.printStackTrace(); 
      } 
      finally { 
       try { 
        entityManager.close(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 

     } 
     response = response_value; 
     return response; 
    } 

    /** 
    * Convert AanleverAfspraakBO to AanleverAfspraakVO 
    * @param aanleverAfspraakDO 
    * @return 
    * @throws NullPointerException 
    */ 
    private AanleverAfspraakVO convertAanleverAfspraakBOToVO(AanleverAfspraakDO aanleverAfspraakDO) throws NullPointerException { 
     if(aanleverAfspraakDO == null){ 
      throw new NullPointerException("aanleverAfspraakDO is null"); 
     } 

     final AanleverAfspraakVO aanleverAfspraakVO = new AanleverAfspraakVO(); 

     aanleverAfspraakVO.setId(aanleverAfspraakDO.getId()); 
     aanleverAfspraakVO.setOmschrijving(aanleverAfspraakDO.getOmschrijving()); 
     aanleverAfspraakVO.setIngangsDatum(aanleverAfspraakDO.getIngangsdatum()); 
     aanleverAfspraakVO.setEindDatum(aanleverAfspraakDO.getEinddatum()); 

     return aanleverAfspraakVO; 
    } 

    public int getId(){return id;} 
    } 
} 

Birisi bana açıklayabilir misiniz?

cevap

0

EntityManager oluşturmanız gerekmez. Oyun bunu yapıyor.

Yani 2,4 ve önceki bu sadece çalışması gerekir oynayın:

final EntityManager entityManager = JPA.em().createNamedQuery("findbyid"); 

JPA.em() bu parçacığı (https://www.playframework.com/documentation/2.4.x/api/java/index.html) için varsayılan EntityManager verir. JPA hala çalışıyor olsa

itibaren Play'in en JPAApi enjekte edebilir sana 2.4 oynayın:

@Inject 
public MyClass(JPAApi api) { 
    this.jpaApi = api; 
} 

ve sonra jpaApi.em() (https://www.playframework.com/documentation/2.5.x/api/java/play/db/jpa/JPAApi.html).

0

Herkes yardımlarınız için teşekkürler, ancak bu sorunu bir an önce çözdüm. Ben değişken API Eğer 2.5 Çal kullanarak görmedim JPAApi

+0

bir örneğidir benim işlem

@Transactional public Option<AanleverAfspraakDTO> executeTask() { final Option<AanleverAfspraakDTO> response = api.withTransaction(() -> { final Query query = api.em().createNamedQuery("findbyid").setParameter("id", id); final Collection<AanleverAfspraakDO> resultset = query.getResultList(); 

için aşağıdaki kodu kullandım. Yani JPAApi önerilen seçimdir (muhtemelen daha önce anladığınız gibi). – Kris

İlgili konular