</class> </hibernate-mapping> 加了一个主键rowid,可以用hql正常查询了: String hql = "FROM VZYxaqOnlinelocoxyId as p Query q = this.session.createQuery(hql) ; List l = q.list() ; 但是用sql好像又不行了: String sql = "select * from v_z_yxaq_onlinelocoxy v"; // where v.机车型号=:jx and v.机车号=:jch "; Query q = this.session.createSQLQuery(sql); List l = q.list();这时跟踪调试可以看到l里有数据,但是用bean的VZYxaqOnlinelocoxyId类型就无法转换了,是不是由于bean里自己添加rowid的问题?如果在sql里加上了 select v.rowid,v.* from v_z_yxaq_onlinelocoxy v; 调试又报No Dialect mapping for JDBC type 说不是直接映射的。
你做视图的时候虚拟个主键比如由两个字段确定一个记录的话主键可以这样select a||b as id from xxx这样就行了
<class name="com.teg.lais.curve.VDcContent" table="V_Dc_Content" schema="YXAQ">
<composite-id name="id" class="com.teg.lais.curve.VDcContentId">
<key-property name="checi" type="java.lang.String">
<column name="CHECI" length="10" />
</key-property>
<key-property name="station" type="java.lang.String">
<column name="STATION" length="20" />
</key-property>
<key-property name="time" type="java.lang.String">
<column name="STATION" length="20" />
</key-property>
</composite-id>
</class>
</hibernate-mapping> 如果你的表数据库没有建立主键,Hibernate就会生成这样的将整个记录做为一个composite-id的情况。还有你看红字是你漏掉了还是除了composite-id还有其他field,如果是还有其它Field生成,那我也不清楚了。因为既然是主键那必须非空的,取出来有记录就一定有数据。
我手动写了一个:
<hibernate-mapping>
<class name="com.teg.lais.curve.VZYxaqOnlinelocoxyId" table="V_Z_YXAQ_ONLINELOCOXY" schema="YXAQ">
<id name="rowid" type="java.lang.String">
<column name="ROWID" length="20" />
<generator class="assigned"/>
</id>
<property name="jx" type="java.lang.String">
<column name="jx" length="4" />
</property>
<property name="jch" type="java.lang.String">
<column name="jch" length="4" />
</property>
<property name="jcm" type="java.lang.String">
<column name="jcm" length="20" />
</property>
<property name="time" type="java.util.Date">
<column name="time" length="7" />
</property>
</class>
</hibernate-mapping>
加了一个主键rowid,可以用hql正常查询了: String hql = "FROM VZYxaqOnlinelocoxyId as p
Query q = this.session.createQuery(hql) ;
List l = q.list() ;
但是用sql好像又不行了: String sql = "select * from v_z_yxaq_onlinelocoxy v"; // where v.机车型号=:jx and v.机车号=:jch ";
Query q = this.session.createSQLQuery(sql);
List l = q.list();这时跟踪调试可以看到l里有数据,但是用bean的VZYxaqOnlinelocoxyId类型就无法转换了,是不是由于bean里自己添加rowid的问题?如果在sql里加上了
select v.rowid,v.* from v_z_yxaq_onlinelocoxy v; 调试又报No Dialect mapping for JDBC type 说不是直接映射的。