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

使用内连接(hql)

fromProductpinnerjoinCategory(错误)

fromProductpinnerjoinp.category

或者:

Stringhql="selectpfromProductp,Categorycwherep.category=c";

Stringhql="selectpfromProductp,Categorycwherep.category.id=c.id";

使用criteria

Criteriacrit=session.createCriteria(Product.class).createCriteria("category");

List<Product>list=crit.list();

使用左外连接

hql="selectcfromCategorycleftouterjoinc.productsorderbyc.id";

QBC实现左外连接

Criteriacriteria=session.createCriteria(Category.class).setFetchMode("products",FetchMode.JOIN);

使用右外连接(方言使用9,9i不支持)

hql="selectcfromCategorycrightouterjoinc.products";

使用迫切内连接(在join后面加fetch即可,左右外一样)

hql="selectcfromCategorycjoinfetchc.products";

命名的hql

在配置文件(.hbm.xml)中加入

<queryname="com.selectGuest">

<![CDATA[selectgbfromGuestBookgbwheregb.idbetween:beginand:end]]>

</query>,注意这段话加在class外面

程序中使用:Queryquery=session.getNamedQuery("com.selectGuest");

query.setInteger("begin",1);

query.setInteger("end",100);

命名的sql

<sql-queryname="com.selectGuest">

<![CDATA[select{gb.*}fromguestBookgbwheregb.id=:id]]>

<returnalias="gb"class="com.v512.Guestbook"/>

</sql-query>,注意这段话加在class外面

调用存储过程Oracle

<sql-queryname="com.selectGuest"callable="true">

<returnalias="Guestbook"class="com.v512.Guestbook"/>

{callselectGuestbookById(?,:id)}

</sql-query>,注意这段话加在class外面

使用SQL查询

Stringsql="select*fromguestbook";

SQLQuerysqlQuery=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();

或者

Stringsql="select{p.*}fromproductp,categorycwherep.category_id=c.id";

SQLQuerysqlQuery=session.createSQLQuery(sql);

sqlQuery.addEntity("p",Product.class);

或者

sqlQuery.setResultTransformer(Transformers.aliasToBean(Product.class));

hibernater不支持直接更新或删除的存储过程

Hibernate中直接使用JDBC

Connectionconn=session.connection();

Stringprocedure="{callupdateGuestbookById(?,?)}";

try{

CallableStatementstmt=conn.prepareCall(procedure);

stmt.setInt(1,1);

stmt.setString(2,"修改了主题");

stmt.executeUpdate();

}catch(Exceptione){}

相关推荐