Hibernate 使用内连接(hql) 使用左外连接 命名的hql 命名的sql 调用存储过程Oracle 等...

使用内连接(hql)
from Product p inner join Category (错误)
from Product p inner join p.category
或者:
String hql = "select p from Product p,Category c where p.category=c";
String hql = "select p from Product p,Category c where p.category.id=c.id";
使用criteria
Criteria crit = session.createCriteria(Product.class).createCriteria("category");
List<Product> list = crit.list();
使用左外连接
hql="select c from Category c left outer join c.products order by c.id";
QBC实现左外连接
Criteria criteria = session.createCriteria(Category.class).setFetchMode("products",FetchMode.JOIN);
使用右外连接(方言使用9,9i不支持)
hql="select c from Category c right outer join c.products ";
使用迫切内连接(在join后面加fetch即可,左右外一样)
hql="select c from Category c join fetch c.products ";

命名的hql
在配置文件(.hbm.xml)中加入
<query name="com.selectGuest">
<![CDATA[select gb from GuestBook gb where gb.id between :begin and :end]]>
</query>,注意这段话加在class外面
程序中使用: Query query = session.getNamedQuery("com.selectGuest");
query.setInteger("begin",1);
query.setInteger("end",100);
命名的sql
<sql-query name="com.selectGuest">
<![CDATA[select {gb.*} from guestBook gb where gb.id =:id]]>
<return alias="gb" class="com.v512.Guestbook" />
</sql-query>,注意这段话加在class外面
调用存储过程Oracle
<sql-query name="com.selectGuest" callable="true">
<return alias="Guestbook" class="com.v512.Guestbook" />
{call selectGuestbookById(?,:id)}
</sql-query>,注意这段话加在class外面

使用SQL查询
String sql="select * from guestbook";
SQLQuery sqlQuery = session.createSQLQuery(sql);
List<Object[]> list = sqlQuery.list();

或者sqlQuery.addScalar("id",Hibernate.INTEGER);
sqlQuery.addScalar("name",Hibernate.STRING);
sqlQuery.addScalar("email",Hibernate.String); //(注意,这儿是字段)
List<Object[]> list = sqlQuery.list();
或者sqlQuery.addEntity(Guestbook.class);
List<GuestBook> list = sqlQuery.list();
或者
String sql= "select {p.*} from product p,category c where p.category_id=c.id";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity("p",Product.class);
或者
sqlQuery.setResultTransformer(Transformers.aliasToBean(Product.class));

hibernater 不支持直接更新或删除的存储过程
Hibernate 中直接使用JDBC
Connection conn = session.connection();
String procedure ="{ call updateGuestbookById(?,?)}";
try{
CallableStatement stmt = conn.prepareCall(procedure );
stmt.setInt(1,1);
stmt.setString(2,"修改了主题");
stmt.executeUpdate();

}catch(Exception e){}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值