2011-07-08 6 views
6

güncellemeden sonra başarısız iç içe varlıkların getirilirken katılmak"Otomatik", bazı sorgular iletisiyle başarısız (o JBoss 6 JBoss 4.2.2 den anahtarıyla birlikte gelen tahmin) daha yeni hazırda sürümüne yükselttikten sonra Hazırda

SELECT entityA FROM EntityA entityA 
JOIN FETCH entityA.entityB 
LEFT JOIN FETCH entityA.entityB.someField 
WHERE entityA.entityB.anotherField LIKE :someParameter 

sorunun çözümü "entityA.entityB" bir takma ad vermek ve daha sonra WHERE fıkrada bu takma ad kullanımı: böyle bir sorgu kullanırken Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName= (...)

Bu her zaman böyledir. Ancak bazı sorgularda LEFT JOIN FETCH açık olarak verilmez, ancak yine de WHERE yan tümcesi başvurulan varlığın özelliğini kullanır. Orada da başarısız mı olacak? Ne değişti, yeni JBoss versiyonuna geçtikten sonra aniden başarısız oldu mu?

Aşağıdaki question bu soruyla ilgilidir ve çözümü içerir, ancak sorunu açıklamamaktadır.

+0

Sorunuz, hazırda bekletme 3.2.6.ga'dan 3.5.6-Final'e yükselttikten sonra, sorgumla ilgili bir çözüm bulmama yardımcı oldu. Sorgulama gönderme katılımı alma işlemi gerçekleştiriliyordu, ancak getirilen ilişkilendirmenin sahibi değil Seçim listesinde mevcut ', önerdiğin takma ad yaklaşımını kullanarak,' neden 'olsa da size yardımcı olamam! –

+0

bu HQL mi yoksa standart JPQL mi? – wrschneider

+0

Bu "EntityManager.createQuery" ile yapılır, bu yüzden HQL olduğunu sanırım. –

cevap

3

sorgu olmalıdır

SELECT entityA FROM EntityA entityA 
JOIN FETCH entityA.entityB entityB 
LEFT JOIN FETCH entityB.someField 
WHERE entityB.anotherField LIKE :someParameter 

yani Birleştirilen varlıklara bir takma ad atamanız ve sonraki takma adlar veya kısıtlamalar için bu takma adı kullanmanız gerekir.

+0

Evet biliyorum .. ama her zaman böyle olmuştur. Ve Hazırda Bekletme 3'ten 4'e geçiş kabulü bir şekilde değiştirdi ve bu bizim için çok fazla göç çalışmalarına neden oldu. Sadece neden birdenbire kısa bir süre önce hazırda bekletmeyi uyumlu hale getirmeyi bıraktıklarını bilmek istedim. –

+0

Benim tahminimce kodunuz, şimdi düzeltilmiş bir Hazırda Bekletme hatasına dayanarak kazayla çalıştı. –

0

Projemde aynı sıkıntıya sahibim ve bunu çözmek çok zor çünkü önceden derlenmiş adlandırılmış sorguları kullanan çok sayıda modüle sahip büyük bir eski sistemim var ve talep üzerine oluşturulan çok sayıda sorgu var. Tüm sistemi tanımlamak ve değiştirmek ve hazırda bekletmenin eski bir sürümünü kullanarak çalıştığı yerde değişiklik yapmak çok can sıkıcı bir iş ve hataya eğilimlidir. Bu sorun, JB42'de, hazırda bekletme sürümü 4.2.18'den 4.2.22'ye yükseltildiğinde 6.4'ten 6.4.6'ya geçiyorum ve bu hata ortaya çıkıyor. Bunu çözmek için, ilk varsayılan sürüm 4.2.18'e göre yalnızca hazırda bekletilen ana modülün bir sürümünü düşürüyorum ancak bu iyi bir şey değil çünkü bir sonraki JBoss yaması geldiğinde onu tekrar değiştirmem gerekiyor. Ben JBoss modülleri ve persistence.xml ve jboss-deployment-strcuture.xml içindeki bazı yapılandırmayı kullanmaya çalışıyorum ama henüz başarılı olamadım.

İlgili konular