日期:2014-05-18  浏览次数:20672 次

急!hibernate如何通过查到的表名的变量来获得他对应的映射类名?
举个例子来说:下面是一个简单的表的映射文件BookInfo.hbm.xml
<hibernate-mapping>  
  <class name="BookInfo" table="book_info">  
  <id name="id" column="Book_ID" type="long">  
  <generator class="native"/>  
  </id>  
  <property name="bookName" type= "string" column="Book_Name"/>  
  <property name="bookAuthor" type="string" column="Book_Author" /> 
  .
  .  
  </class> 
</hibernate-mapping>

第一个问题:我用hibernate查询语句先从一个含有Table_Name(表名)的字段的表中查出这个字段的值也就是(上面配置文件中的真实表名book_info),
于是便得到这个表名的变量相当于String table_name="book_info";
然后我把这个变量加到hql查询中List ll=session.creatQuery("from"+table_name).list();
于是问题便产生了:上面的table_name变量的值是"book_info",而要查询通过需要把"book_info"转换成"BookInfo"也就是表的映射类名,问题是如果得到了"book_info"表的真实名称变量,如何能通过他得到对应的映射类名称即("BookInfo")

第二个问题:如果在第一个问题解决的情况下,也就是获得到了值为"BookInfo"的映射类名称变量
相当于String table_classname="BookInfo";
List ll=session.creatQuery("from"+table_classname).list();
上面的查询应该可以通过,可是下面取数据的时候问题又产生了:
for(int i=0;i<ll.size();i++)
{
  在知道映射类的情况下可以用BookInfo bi=(BookInfo)ll.get(i);然后bi.getBookID()...就可以
  可现在映射类是个变量了,这下我该如何取数据呢?
}
望大家指点!

------解决方案--------------------
Java code
String className = ll.get(0).getClass().getSimpleName();

------解决方案--------------------
学习中———
顶一下——————
------解决方案--------------------
这个兄弟是为了做一个通用的方法
但是你的影射类型是变量 我以前也这么去想过
但是没有成功
呵呵 你还是不用这个方法的 不过了 可能是我学的不够多对hibernate 
的了解不是很深 所以做不出来
如果楼主 做出来了 不妨将代码公开 让大家共享共享
------解决方案--------------------
要不用session.createSQLQuery("select * from "+yourTable).list();

它返回一个list列表

list将返回一个Object数组(Object[])组成,数组每个元素都是表的一个字段值,不管什么表。

不知道能否满足你的要求