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<Comment> list = dao.findByBook(book);
·····

时间: 2024-11-16 07:29:07

Hibernate基于外键的查询方法的相关文章

hibernate 1对1 基于外键 关联

问题描述 hibernate 1对1 基于外键 关联 应该图中我都描述清楚了.没多深的应用.只是学习阶段遇到的不理解的地方. 求前辈们 指导 解决方案 Hibernate之基于外键映射的一对一(1-1)关联关系 解决方案二: 一对一,hibernate会自动的去维护orm关系映射

link环境下多类型外键复合查询的实现是怎样的?能否举例?

问题描述 link环境下多类型外键复合查询的实现是怎样的?能否举例? link环境下多类型外键复合查询的实现是怎样的?能否举例? 解决方案 http://www.iteye.com/problems/73405

link 环境下,如何处理外键查询的多类型结构,外键多类型查询的实现是什么?

问题描述 link 环境下,如何处理外键查询的多类型结构,外键多类型查询的实现是什么? link 环境下,如何处理外键查询的多类型结构,外键多类型查询的实现是什么? 解决方案 http://www.iteye.com/problems/73405

请帮写个hibernate带外键的hql语句

问题描述 我有4个表,各对应着主外键关系,请看映射文件:我想做这样的sql查询:select * from hr_branch_info where hbi_n_prior=? and hbi_v_name=?请把它转写成HQL语句,我刚接触hibernate不大会.如能给解释一下就更好了. <hibernate-mapping> <class name="com.pojo.HrBranchInfo" table="hr_branch_info"

Criteria 外键匹配查询

package jd; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Projections;

hibernate级联外键为NULL

问题描述 级联失败的问题请问:ORACLE数据库里有一张表keywords,主键为ID,外键为PID,一条数据里包含ID,keyword,PID,ismainkey(布尔型)每个ismainkey为真的keyword对应一组(set)PID=ID且ismainkey为假的keyword用的hibernate做的映射,如下<many-to-onename="keywords"class="ss"fetch="select"cascade=&q

hibernate 删除 外键约束

问题描述 写了两个类: Subject(一端) Comment(多端)其对应hbm xml(截取)为:subject.hbm.xml: <set name="comments" lazy="true" inverse="true" cascade="all" sort="unsorted" > <cache usage="read-write" /> <ke

干货分享:外链的查询方法

要检查昨天的工作真是一件比较烦的事情,发的外链比较少也就罢了,发的比较多的话,要把几十个URL全部都搞到百度里去,烦啦.今天本人无意中发现一个查询昨日外链的方法.大家都知道文本链接对于优化来说也是有一定的作用的,那么我的方法只能查文本链接,锚文本链接的话自从雅虎离我们而去的时候我已经找不到查询锚文本的方法了. 首先第一步 用site语法查询你昨日的收录.这个我就不截图了相信大家都会.不会的自己去百度. 第二歩 把site和冒号去掉然后敲击回车.如图1,图2   (图1)   (图2) 查询昨日外

Hibernate映射外键

问题描述 我有个cartItem类,其中参照Product的主键,映射文件如下,为什么会出错啊!求指教!publicclassCartItem{privateProductproduct;privateNormalUsernormalUser;privateintcartId;privateintnumber;} publicclassProduct{privateMerchantmerchant;privateintproductId;privateStringname;privateStri