`
sundful
  • 浏览: 1232152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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){}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics