【问题标题】:Hibernate SQL Error in generated query (Potentially a mapping mistake)生成查询中的 Hibernate SQL 错误(可能是映射错误)
【发布时间】:2017-12-25 06:14:15
【问题描述】:

我正在使用 Hibernate 制作这个简单的应用程序来执行一些 CRUD 操作。我在休眠生成的查询中遇到此错误

配置 XML:

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/library</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123456</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="hibernate.default_schema">library</property>
    <property name="hbm2ddl.auto" value="create"/>
    <!-- Mappings -->
    <mapping resource="librarysystem/mappings/Role.hbm.xml"/>
    <mapping resource="librarysystem/mappings/Librarian.hbm.xml"/>
    <mapping resource="librarysystem/mappings/Task.hbm.xml"/>
    <mapping resource="librarysystem/mappings/Library.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

POJO:

public class Library  implements java.io.Serializable {

    private int id;
    private String name;
    private Set librarians = new HashSet(0);

    //Constructors, getters and setters...
}

映射:

<hibernate-mapping>
    <class name="librarysystem.entities.Library" table="library" catalog="library" optimistic-lock="version">
        <id name="id" type="int">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="name" type="string">
            <column name="name" length="45" />
        </property>
        <set name="librarians" table="librarian" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="libraryid" not-null="true" />
            </key>
            <one-to-many class="librarysystem.entities.Librarian" />
        </set>
    </class>
</hibernate-mapping>

获取列表的代码:

List<Library> libraries = session.createQuery("FROM Library").list();

当我运行查询以获取库列表时,出现异常,提示查询语法错误

查询的日志输出为:

select
    library0_.id as id1_2_,
    library0_.name as name2_2_ 
from
    library.library.library library0_

library.library.library 是如何发生的? 有什么帮助吗?

我已经给出了我认为必要的最低限度的细节。如果您需要更多代码来查找错误(如其他 POJO 和映射),请告知我

【问题讨论】:

    标签: java mysql hibernate mapping


    【解决方案1】:

    library.library.library 是如何发生的?请问有什么帮助吗?

    我不是这里的专家,但我认为这里的三重库来自名为库的数据库(目录)命名库中的表。

    <class name="librarysystem.entities.Library" table="library" catalog="library" optimistic-lock="version">
    

    表名和目录名相同。因此,我们正在寻找一个名为 library library 的目录,其中我们想要一个名为 library library.library 的表。虽然我不是 100% 在第三个库上,但我认为我的方向是正确的。

    附带说明,我发现使用 hibernate 注释而不是 xml 映射更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多