Veritabanımdaki varlıklarımı seçmek için Kriteri API'sı ile JPA2 kullanıyorum. Uygulama, WebSphere Application Server'da OpenJPA'dır. Bütün varlıklarım Fetchtype = Lazy ile modellenmiştir.jpa tembel varlıkları ölçütler api ile birden çok düzeyde getirme
Veritabanından bazı ölçütlere sahip bir varlık seçiyorum ve tüm iç içe geçmiş verileri alt tablolardan bir kerede yüklemek istiyorum. Ben masa Bir tablo B'ye oneToMany katılmış bir datamodel varsa, benim kriterleri sorguda bir Getir-maddesini kullanabilirsiniz: Bu iyi çalışır
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
Fetch<A,B> fetch = root.fetch(A_.elementsOfB, JoinType.LEFT);
. Bir A elementi alıyorum ve tüm B elementleri doğru şekilde dolduruldu. Artık B tablonun C tablasına bir oneMonm ilişkisi var ve ben de onları yüklemek istiyorum. Yani benim sorguya aşağıdaki ifadeyi ekleyin:
Fetch<B,C> fetch2 = fetch.fetch(B_.elementsOfC, JoinType.LEFT);
Ama bu alışkanlık her şeyi yaparım.
Tek bir sorguda çok düzeyli varlıkları nasıl getireceğini bilen var mı?
Cevabınız için çok teşekkürler. Ama işaret ettiğiniz dökümantasyon makalesinde bir JPQL örneği var: 'SELECT x FROM Magazine x birleştirme getir x.articles birleştirme getirme a.publishers p WHERE x.title = 'JDJ' Tablolar x vardır, ve ilişkilerle p => a ve a-> p. Bu tam olarak ölçüt API'siyle yapmak istediğim şey. –
Çok dikkatli okumadınız. Sözdizimi hatasına neden olan sorgu hakkında bir örnektir. Bu sorgudan önceki cümledir: "Aşağıdaki sorgu sözdizimi hatasıyla sonuçlanacaktır:". Ne yapmak istiyorsan işe yaramıyor. –
Oh, haklısın. Yani sadece şunu söyleyebilirim: Ooops. Ama neyse ... Böyle bir sorunu çözebileceğim bir uygulama var mı? Bence bu dünyada ikiden fazla masa almak isteyen çok insan var. İlk önce ikinci masaya katılmalı mıyım yoksa diğer verileri manuel olarak mı okumalıyım? Bunun için en iyi uygulama nedir? –