当前位置:首页 » 编程语言 » hibernatesql转对象
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

hibernatesql转对象

发布时间: 2022-04-30 16:44:03

① (java)如何将从数据库中查询出来的结果集转换为对应类的对象可考虑hibernate。

List<BranchBase> rtnList = new ArrayList<BranchBase>();

String sql = "select * from params.tb_branch_kbmp where depttype <> 3070";

//从容器中得到session

Connection connection = null;
PreparedStatement statement=connection.prepareStatement(sql);
ResultSet resultSet= statement.executeQuery();
while(resultSet.next()){
//这里得一个一个取
BranchBase b=new BranchBase();
b.属性名=resultSet.getInt("表的列名");//如果列为varchar()类型就resultSet.getString("表的列名")
//就这样取完
rtnList.add(b);
}

return rtnList;

② Hibernate 和SQL转换问题

参考,输出的项目建个BEAN;

String sql = "select * from SYS_MENUS " +
"where id in (select mid from SYS_GRUP_MENU " +
" where GID in(select gid from SYS_GRUP_USER where " +
"usid=" + String.valueOf(userid) + " ))";
getSession().createSQLQuery(sql).addEntity(SysMenu.class).list();

③ hibernate 用sql和hql的区别

sql 面向数据库表查询

hql 面向对象查询

hql : from 后面跟的 类名+类对象 where 后 用 对象的属性做条件

sql: from 后面跟的是表名 where 后 用表中字段做条件

查询

在Hibernate中使用查询时,一般使用Hql查询语句。

HQL(Hibernate Query Language),即Hibernate的查询语言跟SQL非常相像。不过HQL与SQL的最根本的区别,就是它是面向对象的。

④ [极品难]关于hibernate如何把原生sql查出的结果转化为对象

例如我们有一个照片的POJava code//照片poclass Photo{int id;string title;
double avgScore;//平均分,这个字段在数据库中是没有映射的,也就是 非持久化属性}//投票po ,每张照片对应多个vote记录class Vote{int id;int photoId;int score;}用sql = "select {p.*,avg(v.score) as p.avgScore} from photo p left join vote v on p.id = v.photoId ";
单纯的sql结果很满意,包含照片的信息和每张照片的平均分数。
代码如下:Query query = session.createSQLQuery(sql.toString()).addEntity(Photo.class);
运行后,没有错误,但是在SQL语句中的avg(v.score) as p.avgScore} 这一部分,没有被像我们预期的那样set进photo的avgScore属性中。
问题:我们如果遇到要用原生sql进行查询,并要将结果set进一个po中,其中set进po中的属性,不完全是被可持久化的,例如本例
中的avgScore属性。
PS: 请别和我说完全可以用hql等方式,这只是个简单的示例,目前是想研究原生sql对象映射问题。
我仔细看了那篇文章,addScalar这个的意思似乎只是把查出来的非属性结果进行类型绑定,我现在的困惑是如果把这个值自动绑定进po中~~
就像上面的例子,select出一个po,然后这个po中要有那个avgScore的属性值,目前我试过即使用addScalar明确avgScore的类型,还是不会自动set进po中。。
打印出的SQL:
sql: select {p.id,p.user_id,p.url,p.state,avg(v.score) as p.avgScore} from photos p where p.user_id = :userId and p.state in ( 0, 1 ) group by p.id order by p.id desc
报了个这个错:
44187 [http-8080-1] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1064, SQLState: 42000
44187 [http-8080-1] ERROR org.hibernate.util.JDBCExceptionReporter - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from photos p where p.user_id = 13 and p.state in ( 0, 1 ) group by p.id orde' at line 1
2009-9-3 12:04:39 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from photos p where p.user_id = 13 and p.state in ( 0, 1 ) group by p.id orde' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
如果不加{}那么就报在数据库找不到p.avgScore这列,因为p.avgScore是一个虚似的临时变量,非持久化属性。
我提问题时只是简单写的示例,省略了几个字段,
sql = "select p.id,avg(v.score) from photo p , vote v where p.id = v.photoId group by p.id";
这么写是可以,但不会被自动绑定进PO,我来问就是想知道在不调用SET方法的情况下能否自动把非字段属性绑定进PO。
您看看有没有自动的方式绑定进PO的。。
因为我返回avg(v.score) as p.avgScore,其实在p这个po中是有setAvgScore()这个方法的,可是终始不会被调用 。。。
我甚至做过这个测试,把avgScore()设成@Cloumn(insertable=false,updateable=false),还是不会自动set进po中。。

⑤ hibernate sql查询结果集怎么转换

在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用
session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
来转化为map来进行处理,可以通过以下方式将查询结果转化为实体类:

1,sql语句 String sql="select s.id as id,s.classname as classname from grade s,student st where s.id=st.classid"

利用以下语句
session.createSQLQuery(sql) .setResultTransformer(Transformers.aliasToBean(Grade.class))可以将sql中查询出来的字段转化为班级这个实体类,但是必须为每个字段指定别名,别名就是班级类里面的对应的属性,但必须注意,对每一个列都必须addScalar("列名"),如果不设置addScalar方法可能会报转型错误的异常.如果查询的结果里面包括多个表里面的字段,不能对应一个实体类去接受,就需要新建一个与查询结果对应的实体类,或者直接使用map结果集

2,sql语句 String sql="select {s.*} from grade s,student st where s.id=st.classid"

针对这样的全部字段查询的sql可以利用addEntity来转化为实体类
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);

SQL查询语句,它带一个占位符,可以让Hibernate使用字段的别名.
查询返回的实体,和它的SQL表的别名.
addEntity()方法将SQL表的别名和实体类联系起来,并且确定查询结果集的形态。
这样就可以将班级这张表里面的所有字段的值赋值给班级这个实体类java培训机构排名,而且必须是所有的属性

3,sql语句 String sql="select {s.*},{st.*} from grade s,student st where s.id=st.classid"
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);
query.addEntity("st", Student.class);
利用这样的查询得到的是一个object[]数组,object[0]就是班级实体类,object[1]就是学生实体类
可以用addScalar(String arg,Type type)方法定义要返回的字段类型,如
s.createSQLQuery(shuiQingHQL).addScalar("STCD",Hibernate.STRING).addScalar("STNM")

⑥ 在hibernate中写了一条多表联查sql语句,可是没有返回对象,怎么接值并把它遍历出来

你得到的是一个list<object[]>的东西,你循环遍历就好了
for(object[] o : list){
Object[] obj = o;
......然后在取出这个数组中你想要的值
}

⑦ 怎样将hibernate的sql查询结果集转换为pojo对象结果集

给你这样说吧:Hibernate提供了多种查询数据的方法。通常情况下,使用select子句查询的结果是集合,而集合元素就是select后的实例、属性等组成的数组。
在特殊情况下,如果select后只有一项(包括持久化实例或属性),则查询到元素就是该持久化实例或者属性。
如果select后多个项,则每个集合元素就是选择出的多项组成的数组!
这就是原理,在您使用“用createNativeQuery(sql,object.class).getResultList 带个对象类型就行 ”这个就行是应该知道其中的原理。

⑧ hibernate实体类用了注释,使用createSQLQuery()调用存储结构,能取到对象但是不能转型。

其实得到的对象是一个List<Object> 其中的 Object 是一个 Object数组 一个Object数组 表示你查询到的一条记录,但是这些都只是值,sqlQuery不会自动帮你封装实体对象。
你在执行查询方法的时候hibernate将数据查询到后放在堆中 然后list指向。
当你调用list的时候 他就会想堆中的List<Object>去转换成Bean对象 Object数组怎么可能转换成实体类 所以报错, 唯一的方法 只能你自己循环做处理。

⑨ 在hibernate中能用sql进行增删改吗

觉得可以
jdbc操作的是数据 也就是sql
hibernate操作的是对象 用hql(操作实体类的对象)
例如String hql="from User(这里的User是个实体类) where name(为User类的一个属性)=? ";
可以通过query.setString(0,具体?的值);来对?进行赋值
你查询也是查的对象
hql :
增:session.save();
删:首要要写一个方法findUserById();用来查询特定的对象
查找到你要删除的对象然后session.delete(user);
改:找到药修改的对象 对其属性重新赋值之后
session.saveOrUpdate(user);即可!

⑩ hibernate查询数据库时采用sql查询得出的结果没有对象名称,该怎么解决呢

1、查看自己写的语句,没有丝毫的错误。放到SQL查询分析器执行。也能检索出数据。
这确保了这条语句是没错的。
提示:Hibernate中的SQL语句是不区分大小写的,即便是你查询的表名。比如你写成这
样也是合法的
"SEleCt
*
fRoM
ClaSSes
"。那么Hibernate怎样操作对象?问题的关键
是这里sQuery.addEntity(Classes.class);这条语句,
你要正确填写你要检索的表的
实体,它必须是你存在的POJO。
2、使用Hibernate官方推荐的HQL查询,同样的数据库,同样的表。结果是正确的。这
确保了数据库链接是绝对没有问题的。
3、仔细检查我写的SQL查询方法,没有发现什么语法错误。
4、检查我查询表的POJO对象的映射文件.XXX.hbm.xml
,主键生成方式是
native
。似
乎也没有错误。
5、检查数据库检索表的主键,也已经设成自动增长。