在多表查詢的時候使用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")