程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Hibernate基於外鍵的查詢方法

Hibernate基於外鍵的查詢方法

編輯:關於JAVA

我在解決這個問題的時候搜到了百度上的同樣問題:hibernate中表怎麼根據外鍵查詢 ??

它的設計為:我有兩張表:Teacher id(主鍵) name Student id(主鍵) name tid(外鍵對應Teacher的id)

public List findStudentByTeacher(Teacher teacher) {
try {
session = this.openSession();
String HQL = "select s.name from Student as s where s.tid ="+teacher.getId();
query = session.createQuery(HQL);
return query.list();
} catch (Exception e) {
e.printStackTrace();
logs.error("查詢學生時候出現錯誤!");
return null;
}finally{
this.closeSession(session);
}
}

最優答案為:改為:String HQL = "select s.name from Student as s where s.teacher.id ="+teacher.getId();

本人采用的是MyEclipse中自動生成的代碼:

  Comment表:
id int primary key,
...
bk_id int not null,
FOREIGN KEY(BK_Id) REFERENCES book(BK_Id)

應該注意,Hibernate是基於對象的實現,所以Comment表對應的映射中沒有bk_id,而是變為book對象。下面是是基於外鍵的查找方法:

數據訪問層(DAO類):

  public List findByProperty(String propertyName, Object value) {
log.debug("finding Reply instance with property: " + propertyName
+ ", value: " + value);
try {
String queryString = "from Reply as model where model."
+ propertyName + "= ?";
Query queryObject = getSession().createQuery(queryString);
queryObject.setParameter(0, value);
return queryObject.list();
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
}
//根據外鍵book來查找對應的評論
public List findCommentByBook(Object book) {
return findByProperty("book", book);
}

業務邏輯層:

Book book = new Book();
book.setBkId(bookId); //只要set 主鍵創建一個book對象就可以了,因為hibernate雖然對應是基於book對象的查找,但是實際上也只動用到bookId這個屬性,其它屬性對這不起作用(我理解,歡迎更正)
List<Comment> list = dao.findByBook(book);
·····

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved