当前位置:编程学习 > JAVA >>

hibernate报错unexpected token: mo near lin

运行了半天 报这个错误
Exception in thread "main" org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: mo near line 1, column 309 [select brand from cn.webstudio.bean.McurwDataCampaignBrand as brand INNER JOIN brand.mcurwDataTeam as team INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels bam INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels.mcurwDataModel as mo where 1=1 and team.teamName= ? and brand.campaignEndTime>= ?  mo.amodelName= ? and brand.campaignStartTime<= ? ]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: mo near line 1, column 309 [select brand from cn.webstudio.bean.McurwDataCampaignBrand as brand INNER JOIN brand.mcurwDataTeam as team INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels bam INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels.mcurwDataModel as mo where 1=1 and team.teamName= ? and brand.campaignEndTime>= ?  mo.amodelName= ? and brand.campaignStartTime<= ? ]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:657)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:921)
at cn.webstudio.dao.impl.McurwDataCampaignBrandDaoImpl.findByPropertys(McurwDataCampaignBrandDaoImpl.java:229)
at cn.webstudio.service.impl.CampaignServiceImpl.findByCondition(CampaignServiceImpl.java:150)
at Test.Test.main(Test.java:28)
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: mo near line 1, column 309 [select brand from cn.webstudio.bean.McurwDataCampaignBrand as brand INNER JOIN brand.mcurwDataTeam as team INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels bam INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels.mcurwDataModel as mo where 1=1 and team.teamName= ? and brand.campaignEndTime>= ?  mo.amodelName= ? and brand.campaignStartTime<= ? ]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:923)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 5 more
Caused by: line 1:309: unexpected token: mo
at org.hibernate.hql.antlr.HqlBaseParser.primaryExpression(HqlBaseParser.java:1038)
at org.hibernate.hql.antlr.HqlBaseParser.atom(HqlBaseParser.java:3422)
at org.hibernate.hql.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3200)
at org.hibernate.hql.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3082)
at org.hibernate.hql.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2802)
at org.hibernate.hql.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2667)
at org.hibernate.hql.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2449)
at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2413)
at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2341)
at org.hibernate.hql.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2296)
at org.hibernate.hql.antlr.HqlBaseParser.expression(HqlBaseParser.java:2082)
at org.hibernate.hql.antlr.HqlBaseParser.logicalExpression(HqlBaseParser.java:1858)
at org.hibernate.hql.antlr.HqlBaseParser.whereClause(HqlBaseParser.java:454)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:708)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
... 15 more



我这有4个表 
一个是车型活动表 还有一个车型表 一个车型表和活动表的中间表 还有一个组表
因为一个活动可以有多个车型 我就弄了一个中间表
中间表只有三个字段 本表id ,车型id (外键)和活动Id(外键)

也就是活动表有一个主键 中间表两个外键一个主键 车型表一个主键

还有一个组表 没什么用 我就不贴了
活动类Xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="cn.webstudio.bean.McurwDataCampaignBrand" table="mcurw_data_campaign_brand">
        <id name="campaignId" type="java.lang.Integer">
            <column name="campaign_id" />
            <generator class="identity" />
        </id>
        <many-to-one name="mcurwDataTeam" class="cn.webstudio.bean.McurwDataTeam" fetch="select" lazy="false">
            <column name="campaign_team_id" />
        </many-to-one>
        <property name="campaignTeam" type="java.lang.Integer">
            <column name="campaign_team" not-null="true">
                <comment>活动归属组的ID</comment>
            </column>
        </property>
        <property name="campaignStartTime" type="java.lang.Long">
            <column name="campaign_start_time" not-null="true">
                <comment>活动开始时间</comment>
            </column>
        </property>
        <property name="campaignEndTime" type="java.lang.Long">
            <column name="campaign_end_time" not-null="true">
                <comment>活动结束时间</comment>
            </column>
        </property>
        <set name="mcurwRelationshipCampaignBrandAndModels" inverse="true">
            <key>
                <column name="brand_id" not-null="true">
                    <comment>活动ID</comment>
                </column>
            </key>
            <one-to-many class="cn.webstudio.bean.McurwRelationshipCampaignBrandAndModel" />
        </set>
    </class>
</hibernate-mapping>



中间表xml


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="cn.webstudio.bean.McurwRelationshipCampaignBrandAndModel" table="mcurw_relationship_campaign_brand_and_model">
        <id name="campaignId" type="java.lang.Integer">
            <column name="campaign_id" />
            <generator class="identity" />
        </id>
        <many-to-one name="mcurwDataCampaignBrand" class="cn.webstudio.bean.McurwDataCampaignBrand" fetch="select" lazy="false">
            <column name="brand_id" not-null="true">
                <comment>活动ID</comment>
            </column>
        </many-to-one>
        <many-to-one name="mcurwDataModel" class="cn.webstudio.bean.McurwDataModel" fetch="select" lazy="false">
            <column name="model_id" not-null="true">
                <comment>车型ID</comment>
            </column>
        </many-to-one>
    </class>
</hibernate-mapping>



车型xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="cn.webstudio.bean.McurwDataModel" table="mcurw_data_model">
        <id name="modelId" type="java.lang.Integer">
            <column name="model_id" />
            <generator class="identity" />
        </id>
        <property name="modelName" type="java.lang.String">
            <column name="model_name" not-null="true" />
        </property>
        <set name="mcurwRelationshipCampaignBrandAndModels" inverse="true" lazy="false">
            <key>
                <column name="model_id" not-null="true">
                    <comment>车型ID</comment>
                </column>
            </key>
            <one-to-many class="cn.webstudio.bean.McurwRelationshipCampaignBrandAndModel" />
        </set>
        <set name="mcurwDataCampaignProducts" inverse="true" lazy="false">
            <key>
                <column name="campaign_model_id" not-null="true">
                    <comment>车型ID</comment>
                </column>
            </key>
            <one-to-many class="cn.webstudio.bean.McurwDataCampaignProduct" />
        </set>
    </class>
</hibernate-mapping>



我拼写了hql语句是这样的
select brand from McurwDataCampaignBrand as brand INNER JOIN brand.mcurwDataTeam as team INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels bam INNER JOIN brand.mcurwRelationshipCampaignBrandAndModels.mcurwDataModel as mo where 1=1 and team.teamName= ? and brand.campaignEndTime>= ?  mo.amodelName= ? and brand.campaignStartTime<= ? 


请问这么写有问题么?
我写了另一个跟这个差不多的 是正确的,但是这个有一个跟那个不太一样.
就是那个不需要中间表,这个有中间表的应该怎么操作。
错误告诉我大概得意思是
brand.mcurwRelationshipCampaignBrandAndModels.mcurwDataModel as mo
这个mo它说是未知的
请高手解答,在线等 比较急 --------------------编程问答-------------------- 少了 ON 条件 --------------------编程问答-------------------- join是不需要no条件的吧? --------------------编程问答-------------------- 找到错误了
--------------------编程问答-------------------- 他自己把on写成om了。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,