2017-08-14 56 views
-2

我試圖用Jackson/Hibernate/SQL/Java來進行選擇。Hibernate在Java中選擇查詢

這裏就是我想:

Transaction tx = null; 
    List<Note> list = null; 

    try { 
     tx = dbSession.beginTransaction(); 
     Query query = dbSession.createQuery("select Note from notes where name= :nameQ and university= :universityQ " + 
       "and professor= :professorQ"); 
     query.setParameter("nameQ", "ONE"); 
     query.setParameter("universityQ", "TWO"); 
     list = query.list(); 
     tx.commit(); 
     return new FileInfo(Integer.toString(list.size()), fileName); 
    } 

但我得到一個nullptr例外,這顯然意味着什麼是錯的查詢。這有什麼問題?票據類是:

@Table(name="notes") 
@Entity 
public class Note { 
    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    @Column(name="id") 
    private int id; 

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

    @Column(name="course") 
    private String course; 

    @Column(name="university") 
    private String university; 

    @Column(name="date") 
    private String date; 

    @Column(name="professor") 
    private String professor; 

    @Column(name="semester") 
    private String semester; 

    @Column(name="url") 
    private String url; 

    public Note(){ 

    } 

    public Note(String name, String course, String university, String date, String professor, String semester) { 
     this.name = name; 
     this.course = course; 
     this.university = university; 
     this.date = date; 
     this.professor = professor; 
     this.semester = semester; 
    } 

    //Usual setters/getters 

你能幫我嗎?

+0

您是否故意不設置'professorQ'參數? – khriskooper

+0

@khriskooper哇,不知道我是如何錯過的..我會回覆你 – Bana

+0

一般語法是「從註釋n中選擇n從哪裏...」 –

回答

1

有幾件事情,我注意到:

  1. 您還沒有Note類中定義Note列。但是,您要查詢其

    "select Note from notes 
    

我想,你可能需要上面的查詢更改爲

"from notes 
  • 您沒有設置:professorQ

    "and professor= :professorQ"); 
    
  • +0

    如何查詢註釋對象呢?我知道它不是一個專欄,但我想要這個對象本身? – Bana

    +0

    看看我更新的解決方案。 'Note'類定義你所有的列,意味着你需要選擇所有列 – Ravi

    +0

    所以下一步應該是'List list = query.list();'?我仍然得到空指針 – Bana

    2

    看看你的查詢。您使用3個不同的參數nameQ,universityQprofessorQ但是您只設置其中的2個參數。嘗試添加以下行來設置缺少的參數並避免NullPointerException。

    query.setParameter("professorQ", "THREE"); 
    

    而且你select Note這是不正確。正確的HQL查詢是:

    from notes where name= :nameQ and university= :universityQ and professor= :professorQ" 
    

    這可以幫助您獲取包含所有列的整個行。

    +0

    是否應該沒有「選擇」或其他? – Bana

    +0

    沒有。 SQL和HQL是有區別的。 –