重读hibernate参考手册

一.关于inverse维护关系
起作用: 1:N or N:M
1:N时,把多的一端inverse设为false(false为自己控制),好比让毛老头记住全国人民不可能,而全国人民记住毛老头比较轻松.
N:M时,随便一端设为false即可,另一端true.


二.关于<one-to-one>中的constrained
当constrained="false"时表明实体和被关联到的实体的约束不是强制的,即存在一个实体时,
它通过<one-to-one>关联的实体可能存在,也可能不存在.


三.很有意思的绑定参数方法

List names = new ArrayList(); names.add("Izi"); names.add("Fritz"); Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)"); q.setParameterList("namesList", names); List cats = q.list(); Query q = s.createQuery("from foo Foo as foo where foo.name=:name and foo.size=:size"); q.setProperties(fooBean); // fooBean包含方法getName()与getSize() List foos = q.list();


四.使用原生SQL的查询

注意: 如果你选择使用Hibernate的API, 你必须把SQL别名用大括号包围起来:

List cats = session.createSQLQuery( "SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, " + "{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... " + "FROM CAT {cat} WHERE ROWNUM<10", "cat", Cat.class ).list()

五.session.flush都在什么时候执行
在某些查询执行之前
在调用org.hibernate.Transaction.commit()的时候
在调用Session.flush()的时候


六.uniqueResult关键字
以前写代码,总免不了编写登陆部分。在获取user的时候,只可能返回一个user实例,或者为null。以前使用以下方法实现。

public User get(String id){ Session session=HibernateUtil.getSessionFactory().openSession(); String hql="from User u where u.id = ?"; List list=session.createQuery(hql).setString(0, id).list(); if (list.size()==1){ return (User)list.get(0); }else{ return null; } }

发现uniqueResult后:

public User get(String id){ Session session=HibernateUtil.getSessionFactory().openSession(); String hql="from User u where u.id=?"; return (User)session.createQuery(hql).setString(0,id).uniqueResult(); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值