用hibernate生成的两个类:
1.FasbspTab
2.Fasbspzt
我想用inner join方式连接两个表执行如下语句:
hqlstr = "from FasbspTab fas join fetch fas.Fasbspzt";
或语句:
hqlstr = "from FasbspTab fas join fas.Fasbspzt";都报错如下:
org.hibernate.QueryException: could not resolve property: Fasbspzt of: tableclass.Fasbsptab.FasbspTab [from tableclass.Fasbsptab.FasbspTab fas join fetch fas.Fasbspzt]但是单独执行
hqlstr = "from FasbspTab";
或者
hqlstr = "from Fasbspzt";
却是正确的
说明这两个类写得应该是正确的不知道原因在哪,请各位帮帮忙

解决方案 »

  1.   

    与SQL查询一样,HQL也支持连接查询,如内连接,外连接和交叉连接.支持的链接类型是从ANSI SQL中借鉴来的. 1: inner jion (内连接) 
    2: left outer join (左外连接) 
    3: right outer join(右外连接) 
    4: full join(全连接--不常用) inner jion 可以简写为join. 正常情况下必须要建关联。 
      

  2.   

    都已经使用hibernate了,怎么着也该面向对象的操作把
      

  3.   

    could not resolve property: Fasbspzt of:FasbspTab 对象中没有Fasbspzt 这个属性!看看你的实体类吧.
      

  4.   

    发表于:2009-07-06 14:52:264楼 得分:0 
    两个实体类要关联再这么写哦 
    请问如何关联?我看书上或者在网上查的写法都这样
    hqlstr = "from FasbspTab fas join fetch fas.Fasbspzt"; 
    或语句: 
    hqlstr = "from FasbspTab fas join fas.Fasbspzt";但在我这里就不能正确执行。
    而且这两个类FasbspTab和Fasbspzt的写法,大小写是没有错误的,我可以直接在代码中这样写
    FasbspTab.或者Fasbspzt.后面就出现他们的方法属性提示。
      

  5.   

    先去订hbm.xml文件中关联关系, 再看class  的属性对象是否正确
      

  6.   


    呵呵~~你看书很不仔细呀。hqlstr = "from FasbspTab fas join fetch fas.Fasbspzt"; fas.Fasbspzt后面的Fasbspzt是不是掉了一个s(fas.Fasbspzts)?你的fas实体对象里是不是有一个Set的属性,名字叫Fasbspzts?简单说,报错信息已经明确指出:没有一个叫做"Fasbspzt"的属性在FasbspTab实体对象里。
    所以,我猜想你这个是一对多关系,在FasbspTab实体里应该有一个集合,它的名字叫Fasbspzts(如果你用的是Eclipse,并且实体类是通过反向工程自动生成的,那么它一定是叫Fasbspzts)你自己再仔细看看。
      

  7.   

    回复楼上
    FasbspTab和Fasbspzt分别是两个数据库表FASBSP_TAB和FASBSPZT对应生成的两个hibernate包下的两个类
    Fasbspzt的写法是没有错的,Fasbspzt不是FasbspTab的一个属性我想把后台的两个表用inner join连接
    正常的sql语句应该这样写:
    select fasbsp_tab.*,fasbspzt.* from fasbsp_tab inner join fasbspzt on fasbsp_tab.faid0=fasbspzt.faid0
    (在查询分析器里执行正确)现在转为hql语句,我在书上查到得写法是这样
    hqlstr = "from FasbspTab fas join fetch fas.Fasbspzt";
    但执行报上述错误请问这种写法有没有问题?要如何写才正确?是不是要在FasbspTab.hbm.xml和Fasbspzt.hbm.xml下配置东西?我是没有配置的。Fasbspzt.hbm.xml的主体内容如下:
    <hibernate-mapping>
        <class name="tableclass.Fasbspzt.Fasbspzt" table="FASBSPZT" schema="ZZJG">
            <id name="faid0" type="java.lang.String">
                <column name="FAID0" length="20" />
                <generator class="assigned" />
            </id>
            <property name="sendtime" type="java.util.Date">
                <column name="SENDTIME" length="7" />
            </property>
            <property name="sendsign" type="java.lang.String">
                <column name="SENDSIGN" length="1" />
            </property>
            <property name="isdelete" type="java.lang.String">
                <column name="ISDELETE" length="1" />
            </property>
            <property name="chk" type="java.lang.String">
                <column name="CHK" length="1" />
            </property>
        </class>
    </hibernate-mapping>
    FasbspTab.hbm.xml的主体内容如下:
    <hibernate-mapping>
        <class name="tableclass.Fasbsptab.FasbspTab" table="FASBSP_TAB" schema="ZZJG">
            <composite-id name="id" class="tableclass.Fasbsptab.FasbspTabId">
                <key-property name="faid0" type="java.lang.String">
                    <column name="FAID0" length="20" />
                </key-property>
                <key-property name="fjdm0" type="java.lang.String">
                    <column name="FJDM0" length="2" />
                </key-property>
            </composite-id>
            <property name="fabh0" type="java.lang.String">
               ...
            </property>
        </class>
    </hibernate-mapping>
      

  8.   

    问题已解决,用
    hqlstr = "from FasbspTab fas, Fasbspzt fazt where fas.id.faid0 = fazt.faid0";
    替换