Hibernate基于外键的查询方法

我在解决这个问题的时候搜到了百度上的同样问题: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 list = dao.findByBook(book);·····

这一秒不放弃,下一秒就会有希望。

Hibernate基于外键的查询方法

相关文章:

你感兴趣的文章:

标签云: