2010-03-04 14 views
8

How to join tables in unidirectional many-to-one condition?'dan piggy destek alıyorum. İki sınıfları varsaHazırda bekletme durumlarında birden çokya bir arada tabloları nasıl birleştirebilirim?

:

class A { 
    @Id 
    public Long id; 
} 

class B { 
    @Id 
    public Long id; 
    @ManyToOne 
    @JoinColumn(name = "parent_id", referencedColumnName = "id") 
    public A parent; 
} 

B -> Tek ilişkiye bir sayıda olduğunu. Anladığım kadarıyla A'ya bir Bs koleksiyonu ekleyebileceğimi anlıyorum, ancak bu ilişkiyi istemiyorum.

Yani benim asıl soru, SQL sorgusu oluşturmanın HQL veya Kriterler yolu var mı edilir:

select * from A left join B on (b.parent_id = a.id) 

Bu A başvuran her B kaydının Kartezyen ürün ile tüm A kayıtlarını alır ve B'ye referans veren B kayıtları içermez. katılmak

from A a, B b where b.a = a 

o zaman bir iç ve bir B onları başvuran yok A kayıtlarını almazlar:

Eğer kullanın.

İki sorgu olmadan bunu yapmanın iyi bir yolunu bulamadım.

Teşekkürler.

+0

@Joe B Ve istediğin şey ... ??? –

+0

@Arthur Ronald F D Garcia: Yukarıda yazdığım ham SQL sorgusunu yapmanın bir Kriteri veya HQL yoluna ihtiyacım var. Asıl soruyu cesaretlendirmek için yayını düzenledim. – jbarz

cevap

2

Ben ne yayınlanmıştır ile örnek yaptık ve bu işe yarayabilir düşünüyorum:

select a,b from B as b left outer join b.parent as a HQL içinde.

Bunu yapmanın bir "ölçüt" yolunu bulmalıyım.

+0

Üzgünüm, yanlış okumuşum, ihtiyacınız olan bu değil – Luciano

+1

Belki biri bir hile yapar: a, b B'den b'ye doğru b.pardırarak b.parent'yi – Luciano

+0

olarak seçtim Doğru bir katılımı düşünmedim. HQL doğru katılımları desteklediği sürece ve sadece çalışabilecek birkaç tablo kullanıyorum. Bir deneyeyim. – jbarz

1

Getir özelliğini belirterek bunu yapabilirsiniz.

(10) getirme (isteğe bağlı) Sırayla seçerek dıştan alma getirme ve alma arasında seçim yapın. 6.2: aşağı kaydırarak Chapter 6. Collection Mapping:

Sen adresinde bulabilirsiniz. Sana bir ham SQL sorgusu gerçekleştirmek için bir yol istediğini senin Sorunun yorumunda okumak

Bir Koleksiyon

DÜZENLEME Mapping?

Chapter 13 - Native SQL Queries

ve HQL yoluyla mümkün hale getirmek için bir yol istiyorsanız: Bölüm 11 yılında

Chapter 11. HQL: The Hibernate Query Language

, aşağı kaydırmak istediğiniz muhtemelen ilgisini çekebilecek Burada referans 11.3. Dernekler ve birleştirmeler.

IQuery q = session.CreateQuery(@"from A as ClassA left join B as ClassB"); 

Ancak, ClassB'nin ClassA üyesi olması gerekiyor. Daha fazla tekrarlama yardımcı olacaktır.

sen named queries olan yararlı olacaksa proove olabilir başka şey:

<query name="PeopleByName"> 
from Person p 
where p.Name like :name 
</query> 

Ve böylece gibi kod içinden bu sorguyu çağırarak:

using (var session = sessionFactory.OpenSession()) 
    using (var tx = session.BeginTransaction()) { 
     session.GetNamedQuery("PeopleByName") 
      .SetParameter("name", "ayende") 
      .List(); 
     tx.Commit(); 
    } 

tarafından başvurulan linke bir göz atın lütfen Ayende daha derinlemesine açıklar.

+0

A'nın B koleksiyonunu eşlemek istemiyorum. Eşlenmiş koleksiyon olmadan bir sorguya ihtiyacım var. – jbarz

İlgili konular