2017-05-11 21 views
0

hibernateで左結合とwhereオプションを使用してhqlを作成する方法に問題があります。私は下記のarama関数にhqlを書き込もうとしましたが、結果は出力として現れませんでした。HQL hibernate left join where節

どうすればいいですか。それは私のために書くことが可能ですか?ありがとうございました。私も自分のコードを共有しました。

以下は私のコードです。

Ogrenciエンティティ

@Entity 
@Table(name = "OGRENCI", schema = "OGRENCI") 
public class OGRENCI { 

    @Id 
    @SequenceGenerator(name = "ActorSeq", sequenceName = "ACTOR_SEQ", allocationSize = 1) 
    @GeneratedValue(generator = "ActorSeq", strategy = GenerationType.SEQUENCE) 
    @Column(name = "ID") 
    private Long Id; 

    @Column(name = "AD") 
    private String ad; 

    @ManyToMany(mappedBy="ogrenciler") 
    Set<Ders> dersler = new HashSet<Ders>(); 


    public Set<Ders> getMovies() { 
     return dersler; 
    } 

    public void setMovies(Set<Ders> dersler) { 
     this.dersler = dersler; 
    } 

    public OGRENCI() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public OGRENCI(String ad) { 
     super(); 
     this.ad = ad; 
    } 

    public String getAd() { 
     return ad; 
    } 

    public void setName(String ad) { 
     this.ad = ad; 
    } 

} 

DERSエンティティ

@Entity 
@Table(name = "DERS", schema = "OGRENCI") 
public class Ders { 

    @Id 
    @SequenceGenerator(name = "DersSeq", sequenceName = "Ders_SEQ", allocationSize = 1) 
    @GeneratedValue(generator = "DersSeq", strategy = GenerationType.SEQUENCE) 
    @Column(name = "ID") 
    private Long Id; 

    @Column(name = "NAME") 
    private String Name; 

    @ManyToMany(cascade=CascadeType.PERSIST) 
    @JoinTable(name="Ders_Ogrenciler", 
     joinColumns={@JoinColumn(name="Ders_ID")}, 
     inverseJoinColumns={@JoinColumn(name="OGRENCI_ID")} 
      ) 
    Set<OGRENCI> ogrenciler = new HashSet<OGRENCI>(); 

    public Set<OGRENCI> getActors() { 
     return ogrenciler; 
    } 

    public void setActors(Set<OGRENCI> ogrenciler) { 
     this.ogrenciler = ogrenciler; 
    } 

    public Ders() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public Ders(String name) { 
     super(); 
     Name = name; 
    } 

    public String getName() { 
     return Name; 
    } 

    public void setName(String name) { 
     Name = name; 
    } 

} 

private static void arama() { 
     // TODO Auto-generated method stub 

     Scanner in = new Scanner(System.in); 
     System.out.println("-----------------------------------------------------------------------"); 
     System.out.print("Dersin Adını Giriniz :"); 
     String ders = in.nextLine(); 

     Session session = HibernateUtil.getSessionFactory().openSession(); 
     Transaction trx = session.getTransaction(); 

     try { 

      trx.begin(); 
      System.out.println("------------------------KALANLAR-----------------------"); 
      List ogrenci = session.createQuery("Select o.ad FROM OGRENCI o left join o.dersler ders WHERE ders.id='"+ders+"'").list(); 

      for (Iterator iterator1 = ogrenci.iterator(); iterator1.hasNext();) { 
       OGRENCI ogr = (OGRENCI) iterator1.next(); 
       System.out.println(ogr.getAd()); 

      } 

      trx.commit(); 
     } catch (Exception e) { 

      if (trx != null) 
       trx.rollback(); 

     } finally { 
      session.close(); 
     } 

    } 
+0

見えること私に一目惚れ@最初の一見。一致するデータがない可能性がありますか? – Antoniossss

答えて

1

SQLの問題は、試してみてください

Query q= session.createQuery("Select o.ad FROM OGRENCI o left join o.dersler ders WHERE ders.id=:id"); 
q.setParameter("id",ders); 
q.list(); 
+0

動作しません。私はIDに関してそれをリストしたくありません。私は結果が、参加者テーブルのScannerを使ってユーザーから入力されたderとして講義名をリストアップしたものであることを望んでいます。 –

+0

しかし、それはクエリが言うことではありません - それはあなたがIDでフェッチしたいと言います。クエリを修正し、引き続き文字列連結のパラメータ設定を使用してください。引用符について心配する必要はありません – Antoniossss

+0

あなたが書いたクエリを試しましたが、うまくいきません。 –