2013-02-25 11 views
9

yılında Sorgu Katıldı. Nerede eksik olduğumu bilmiyorum. Yardımın takdir edilebilir.İç Ben İç Katıldı için, Sorgu sql doğru değil HQL yürütülüyor HQL yürütemeyebilirsiniz olduğum HQL

***Error***: org.hibernate.hql.ast.QuerySyntaxError: unexpected token: ON near line 1, column 148 [SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price FROM com.model.Orders orders INNER JOIN orders.OrderProcessing as op ON op.u_id = orders.u_id INNER JOIN orders.Product as product ON product.p_id = orders.p_id WHERE product.p_id = '208' ORDER BY op.username] 

productList = (List<Orders>) session.createQuery(
"SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price " +                    
"FROM Orders orders " +                 
"INNER JOIN orders.OrderProcessing as op " +                      
"ON op.u_id = orders.u_id " +               
"INNER JOIN orders.Product as product " +                
"ON product.p_id = orders.p_id " +               
"WHERE product.p_id = '"+p_id +"' " +               
"ORDER BY op.username" 
).list(); 

cevap

17

HQL'e katılanlar biraz farklı bir sözdizimine sahiptir.

Hazırda bekletme ile eşleştirilen bu ilişkilendirmeleri zaten aldıysanız, birleştirme koşullarını (birleştirme işlemini gerçekleştirmek için id alanları) genellikle (zaten bu bilgi eşlemede tanımlı olan) tarafından hazırlanır. muhtemelen sözdizimi gibi katılmak bir haç kullanın ve belirtmelidir, o dernekler eşlenen yok durumda

SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price 
FROM Orders order 
INNER JOIN order.orderProcessing as op 
INNER JOIN order.product as product 
ORDER BY op.username 

: üzerinde katılmak dernek ile eşleştirilmiş olan öznitelik belirtmek gerekir ve bunu WHERE maddesindeki koşullara katılın. Bu, şema yapınıza ve DBMS'ye bağlı olarak etkinlik üzerinde olumsuz bir etki yaratabileceğini lütfen unutmayın. HQL hazırda referans 14.3. Associations and joins bölümünde katılır üzerinde

SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price 
FROM Orders order, OrderProcessing op, Product product 
WHERE op.u_id = order.u_id AND product.p_id = orders.p_id 
ORDER BY op.username 

Sen fazla bilgi bulabilirsiniz.

3

HQL'de birleşme SQL'de gibi çalışmıyor.

select order_1.code, item.code, item.quantity 
from Order order_1 inner join order_1.item item; 

veya çok tablo kullanmak seçmek: Bir dernek üzerinde katılabilir ya

select order_1.code, item.code, item.quantity 
from Order order_1, Item item where item.order=order_1; 

ya sözdizimi avantajları ve dezavantajları vardır, bu nedenle duruma göre seçmelisiniz.

Hiç katılmak kullanmak gereksiz hale getirebileceğini bir örtülü notasyonu da olduğu dikkati çekiyor:

select item.order.code, item.code, item.quantity from Item item; 
+0

. SELECT op.username, op.email, orders.p_id, siparişler.o_id siparişler DAN" + \t \t \t \t \t "" + \t \t \t \t \t "İÇ op olarak order.orderProcessing artır" + \t \t \t \t \t "İÇ ürünü" + \t \t olarak order.product artır sipariş \t \t \t "product.p_id =" + p_id + \t \t \t \t_where_ ve fıkra by_ _order önce _from Siparişleri Order_ önce ve sonra - o dize birleştirme size alanlarda bir dizi kaçırdığınızı kullandığınız kodundan düz alınırsa op.username –

+0

TARAFINDAN 0 "SİPARİŞ. Bu sorun değilse, birinin neler olduğunu anlamaya için önce alıyoruz hata sonrası gerekebilir (ve mümkünse haritalama iş nesnelerin/yapı) – Grim

+0

org.hibernate.hql.ast.QuerySyntaxError: Beklenmeyen belirteç : çizgi 1, sütun 60 civarındaki siparişleri [op İÇ op.username İLE productWhere product.p_id = 208ORDER olarak order.product artır olarak op.username SELECT op.email, orders.p_id, orders.o_idFROM siparişleri order.orderProcessing artır orderINNER] –

0

Ben order ayrılmış bir sözcük (order by gibi olduğu için şüpheli). Bunun yerine FROM Orders o yapmayı deneyin.

Sanırım başka sorunlarınız da var.

Seçtiğiniz nesnelere bakın (bir grup rastgele sütun değeri) ve Hazırda bekletme durumunuzu beklemenizi bekliyor (List<Orders>).

Ben Sorgunuzun yapısı SQL modu yerine HQL içine hazırda bekleme kuvvete çünkü geri List<Orders> almazsınız bekliyoruz. Bu modda, her Object[], seçtiğiniz dört sütunun bir kümesi olduğu bir List<Object[]> geri alırsınız.

Bu bağlantı

farklı sorgu ile geri almak için bekleyebilirsiniz ne olduğunu açıklıyor: Hala çalışmıyor

http://www.laliluna.de/jpa-hibernate-guide/ch11s02.html

+0

TARAFINDAN p_id = ' "+ p_id +"' "+ \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t" SİPARİŞ: org.hibernate.hql .ast.QuerySyntaxError: beklenmedik jeton: 1. satırın yanında, sütun 148 [SELECT op.username, op.email, orders.p_id, orders.o_id, product.listed_price FROM com.model.Orders siparişleri INNER JOIN order.OrderProcessing op.u_id = orders.u_id AÇIK İÇ product.p_id = orders.p_id NEREDE üretimi ÜZERİNE ürün olarak orders.Product KATILIN t.p_id = '208' ORDER BY op.username] –

İlgili konular