天天看點

hibernate之原生SQL那點破事entityManger和sqlquery和Session去傳回實體對象

hibernate之原生SQL那點破事entityManger和sqlquery和Session去傳回實體對象
//sql語句
String str="select id,songname,songid,create_time as createTime,grade_person as gradePerson,grade_person_id as gradePersonId,remark  from tb_grade where songname='"+songName+"' and songid= "+songId+" and grade_person='"+u.getNickName()+"' and grade_person_id="+u.getId();
			

			Session session = entityManager.unwrap(org.hibernate.Session.class);
			SQLQuery query = session.createSQLQuery(str);
            Grade grade = null;


            //方法1
			query.setResultTransformer(Transformers.aliasToBean(Grade.class));
			List<Grade> lists = query.list();
            grade=lists.get(0);

            //方法2
			query.setResultTransformer(Transformers.TO_LIST);
			List<Grade> lists = query.addEntity(Grade.class).list();
			grade=lists.get(0);
           

方法2要注意實體類與資料庫字段名不能有相差,特别是資料類型,像部落客的實體就有個timestamp類型的,一直在報錯,部落客本來用的是string類型,後面經大佬指定改成了data類型就能用了!注意!如grade_person在實體類中要麼就是跟資料庫一樣的,要麼就是寫SQL的時候給個别名gradePerson,否則射不到實體類裡

hibernate之原生SQL那點破事entityManger和sqlquery和Session去傳回實體對象

繼續閱讀