【问题标题】:Error in SQL Syntax using hibernate使用休眠的 SQL 语法错误
【发布时间】:2016-08-02 15:38:03
【问题描述】:

我正在尝试使用休眠查询来执行 query.uniqueResult() 我的查询包含

来自 com.classes.Project,其中 NAME='test'

但我得到一个错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的 '.project project0_ where NAME='test'' 附近

hibernate生成的完整查询是:

选择 project0_.PROJECT_ID 作为 PROJECT1_60_,project0_.CL_ID 作为 CL2_60_,project0_.ATTACHMENT_LIST_ID 为 ATTACHMENT3_60_, project0_.TCL_ID 为 TCL4_60_,project0_.RL_ID 为 RL5_60_, project0_.NAME 作为 NAME60_,project0_.DESCRIPTION 作为 DESCRIPT7_60_, project0_.LABEL 作为 LABEL60_,project0_.ACTIVE 作为 ACTIVE60_, project0_.CREATED_BY 为 CREATED10_60_,project0_.CREATED_ON 为 CREATED11_60_, project0_.LAST_MODIFIED_BY 作为 LAST12_60_, project0_.LAST_MODIFIED_ON 作为 LAST13_60_,project0_.PROJECT_TYPE 作为 PROJECT14_60_,project0_.TA_SERVER_ID 为 TA15_60_ 来自 squashtmdev.squashtm.project project0_ where NAME='test'

关联映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2 ao?t 2016 14:54:16 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.classes.Project" table="project" catalog="squashtmdev">
        <id name="projectId" type="java.lang.Long">
            <column name="PROJECT_ID" />
            <generator class="identity" />
        </id>
        <many-to-one name="campaignLibrary" class="com.classes.CampaignLibrary" fetch="select">
            <column name="CL_ID" />
        </many-to-one>
        <many-to-one name="attachmentList" class="com.classes.AttachmentList" fetch="select">
            <column name="ATTACHMENT_LIST_ID" not-null="true" />
        </many-to-one>
        <many-to-one name="testCaseLibrary" class="com.classes.TestCaseLibrary" fetch="select">
            <column name="TCL_ID" />
        </many-to-one>
        <many-to-one name="requirementLibrary" class="com.classes.RequirementLibrary" fetch="select">
            <column name="RL_ID" />
        </many-to-one>
        <property name="name" type="string">
            <column name="NAME" not-null="true" />
        </property>
        <property name="description" type="string">
            <column name="DESCRIPTION" />
        </property>
        <property name="label" type="string">
            <column name="LABEL" />
        </property>
        <property name="active" type="boolean">
            <column name="ACTIVE" not-null="true" />
        </property>
        <property name="createdBy" type="string">
            <column name="CREATED_BY" length="50" not-null="true" />
        </property>
        <property name="createdOn" type="timestamp">
            <column name="CREATED_ON" length="19" not-null="true" />
        </property>
        <property name="lastModifiedBy" type="string">
            <column name="LAST_MODIFIED_BY" length="50" />
        </property>
        <property name="lastModifiedOn" type="timestamp">
            <column name="LAST_MODIFIED_ON" length="19" />
        </property>
        <property name="projectType" type="char">
            <column name="PROJECT_TYPE" length="1" not-null="true" />
        </property>
        <property name="taServerId" type="java.lang.Long">
            <column name="TA_SERVER_ID" />
        </property>
        <set name="testCaseLibraryNodes" table="test_case_library_node" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="PROJECT_ID" />
            </key>
            <one-to-many class="com.classes.TestCaseLibraryNode" />
        </set>
        <set name="campaignLibraryNodes" table="campaign_library_node" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="PROJECT_ID" />
            </key>
            <one-to-many class="com.classes.CampaignLibraryNode" />
        </set>
        <set name="projectFilterEntries" table="project_filter_entry" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="PROJECT_ID" not-null="true" />
            </key>
            <one-to-many class="com.classes.ProjectFilterEntry" />
        </set>
        <set name="requirementLibraryNodes" table="requirement_library_node" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="PROJECT_ID" />
            </key>
            <one-to-many class="com.classes.RequirementLibraryNode" />
        </set>
    </class>
</hibernate-mapping>

任何想法为什么会发生这种情况?

【问题讨论】:

  • 我认为问题是:squashtmdev.squashtm.project,squashtmdev是db,squashtm是table,.project是什么?
  • squashtm 是将查询发送到的数据库,project 是表,squashtmdev 是我用来生成休眠类的数据库(我在使用数据库 squashtm 生成时遇到了同样的问题,它们都有相同的数据模型)
  • 这是from com.classes.Project where NAME='test' 您正在使用的确切查询吗? 'test' 是一个变量?
  • @GoZ 您是否尝试剥离 squashtmdev 并在 MySQL 控制台中执行它?
  • 不,是"from "+Project.class.getName()+" where name='"+projectName+"'"的结果,

标签: java mysql hibernate


【解决方案1】:

这就是我解决问题的方法:

1 - 通过使用配置文件中的 hibernate.default_catalog 属性并重新生成类来删除 hbm 文件上的目录。

2 - 如果它不起作用并且错误现在是 could not find the table yourDatabase.yourTable 或使用 HQL 编辑器 yourDatabase.yourTable is not mapped 尝试删除相关 hbm 文件中的 table="yourTable"

我不知道为什么我必须这样做, 我希望它会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-18
    • 2013-07-10
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多