2016-03-25 41 views
1

'u tanımlamaksızın entityManager'ı enjekte edebiliyorum Herhangi bir kalıcılık birimi tanımlamadan Service sınıfımdaki entityManager'ı enjekte edebiliyorum.Kalıcılık birimi

Bu benim yapılandırma: Benim Servis sınıfta

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 
<jpa:repositories base-package="com.example"></jpa:repositories> 

:

@PersistenceContext 
private EntityManager entityManager; 

// THIS WORKS! 
final Session session = entityManager.unwrap(Session.class); 

yüzünden JPA mı: depoları?

+1

EntityManager'ınız var; bu, entityManager'ı yaratan ve belirtilen veri kaynağını kullanarak oluşturulacak bir enjeksiyona sahip olacak. 'jpa: depolar' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'paketleri basit paketleri söyler ve hangi paketleri (ve alt paketleri) için' 'Repository''' uzunluğunda sınıfları taramak ve kaydeder. – dambros

cevap

0

Yaylı ORM paketinin LocalContainerEntityManagerFactoryBean sınıfı bunu mümkün kılar. 'un bir örneğini oluşturmak için DefaultPersistenceUnitManager sınıfını kullanır ve bu da PersistenceProvider sınıfının createContainerEntityManagerFactory sınıfına sunulabilir. Hazırda bekletme, bu arabirimi Spring'in EntityMangerFactory sınıfının bir örneğini oluşturabilmesi için uygular.

DefaultPersistenceUnitManager sınıfı, default adı verilen bir persistenceUnit oluşturan sınıftır ve sınıf yolundaki sınıflardan geçen tüm varlık sınıflarını bulur. persistence.xml'dan alınan aynı bilgiler, fiziksel bir persistence.xml dosyası olmadan benzer bir yaklaşımla ele alınmıştır.

Sonunda Spring, JPA'ya özgü EntityManagerFactory örneğini almak için yapılandırılmış JpaVendorAdapter kullanır.

Bahar veri JPA özgü <jpa:repositories base-package="...." /> veya @EnableJpaRepositories dinamik sorguları ve diğer özellikleri sağlamak için @Repository ile açıklamalı tüm fasulye taramak için kullanır. Bu kapsamlı bir açıklama değil, ama bu "sihrin" nasıl gerçekleştiğini görüyorsunuz.

grepcode üzerinde daha fazlasını bulabilirsiniz veya daha fazla bilgi için kaynakları karşıdan yükleyin.

+0

Açıklama için Bunti'ye teşekkür ederim. – sophie

İlgili konular