Hibernate执行SQL语句

tcmis 2010-04-11 10:36:10
我现在要实现这么一个功能,,就是一个方法传入一个SQL语句,把结果返回出来,不知道Hibernate如何实现,

List result = new ArrayList();
SQLQuery sqlQuery = getSession().createSQLQuery(sql).addEntity("", "");
List qdata = sqlQuery.list();


因为Hibernate执行sql必须使用addEntity方法,而且必须要指定类名, 因为我传进来的SQL表名肯定是不确定,也许是A表,也许是B表,总之不确定。。那么addEntity这个里面的类如何去写,,或者说这样的情况如何实现,把数据查询出来。。
...全文
920 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmis 2010-04-12
  • 打赏
  • 举报
回复
老大们,我用SQLQuery sqlQuery = getSession().createSQLQuery(sql);方法执行就报错,说是必须要addEntity方法,我也搞不清楚原因,你们都说网上查了都说createSQLQuery可以实现,我的就是不行,后来实在不行,我现在用的是malujun666的方法实现的,谢谢大家。。
lxf001002 2010-04-11
  • 打赏
  • 举报
回复
SQLQuery sqlQuery = getSession().createSQLQuery(sql);
List qdata = sqlQuery.list();

没用过addEntity方法,一直都是直接createSQLQuery(sql)用的

恋之最 2010-04-11
  • 打赏
  • 举报
回复
为什么你不用传个实体参数的方法呢
ww20042005 2010-04-11
  • 打赏
  • 举报
回复
我记得Hibernate执行sql不一定使用addEntity方法??你好好查查。
malujun666 2010-04-11
  • 打赏
  • 举报
回复
昨天项目刚用到的:还望多多指教
//外部文件归类 修改外部文件
public boolean updateExternalFile(String tableName, String idName, String id, String groupStatusName,
String groupStatusValue) throws Exception
{
boolean bl = false;
if (null != tableName && null != idName && null != groupStatusName)
{
String sql = "update " + tableName + " a set a." + groupStatusName + "='" + groupStatusValue + "' where a."
+ idName + "='" + id + "'";
//JDBC
Connection con = null;
PreparedStatement stmt = null;
try
{
con = this.getSession().connection();
stmt = con.prepareStatement(sql);
int rowCount = stmt.executeUpdate();
bl = rowCount > 0;
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
con.close();
con = null;
stmt = null;
}
}
return bl;
}
malujun666 2010-04-11
  • 打赏
  • 举报
回复
咱经验少 一般用的简单 如果要用不得不用sql 就直接session.getConnection()得到Connection对象,就直接上JDBC 就OK了
qingzhe2008 2010-04-11
  • 打赏
  • 举报
回复
JPA中@SqlResultSetMapping这个标注是用在实体类上面的。

如果楼主不用标注那应该是配在配置文件中。
qingzhe2008 2010-04-11
  • 打赏
  • 举报
回复
刚用JPA,也遇到同样的问题。它有em.createNativeQuery(String sql,String sqlResultSetMappingName);这样的方法。
Query q = em.createNativeQuery(
"SELECT o.id AS order_id, " +
"o.quantity AS order_quantity, " +
"o.item AS order_item, " +
"i.name AS item_name, " +
"FROM Order o, Item i " +
"WHERE (order_quantity > 25) AND (order_item = i.id)",
"OrderResults");

@SqlResultSetMapping(name="OrderResults",
entities={
@EntityResult(entityClass=com.acme.Order.class, fields={
@FieldResult(name="id", column="order_id"),
@FieldResult(name="quantity", column="order_quantity"),
@FieldResult(name="item", column="order_item")})},
columns={
@ColumnResult(name="item_name")}
)



没怎么用过hibernate,但我想hibernate也应该有类似的方法,帮楼主找了下。希望下面的对楼主有帮助。


原生的SQL查询可能返回一个简单的标量值或者一个标量和实体的结合体。

Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat")
.addScalar("maxWeight", Hibernate.DOUBLE);
.uniqueResult();
除此之外,你还可以在你的hbm文件中描述结果集映射信息,在查询中使用。

List cats = sess.createSQLQuery(
"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
)
.setResultSetMapping("catAndKitten")// 我想这个catAndKitten也跟上面的OrderResults类似吧
.list();

具体的楼主还是好好翻翻API吧,肯定有的。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧