【问题标题】:Hibernate error: cannot resolve table休眠错误:无法解析表
【发布时间】:2010-11-01 12:25:30
【问题描述】:

我正在尝试使用休眠参考中的示例。

我有一个简单的表 Pupil,其中包含 id、name 和 age 字段。我根据所有 java-beans 规则为它创建了正确的(我认为)java-class。

我已经创建了配置文件 - hibernate.cfg.xml,就像参考中的示例一样。

我为一个类 Pupil 创建了休眠映射,出现了错误。

<hibernate-mapping>
   <class name="Pupil" table="pupils">
       ...
   </class>
</hibernate-mapping>

table="pupils" 在我的 IDE 中是红色的,我看到消息“无法解析表学生”。我还在参考文献中找到了一个非常奇怪的注释,它说大多数用户在尝试运行该示例时都会遇到同样的问题。

啊..我对这个例子很生气..恕我直言,如果作者知道存在这样的问题,他们应该添加一些关于它的信息。

但是,我应该如何解决它?我不想在这里处理 Ant 以及示例中使用的其他工具。我用的是MySql 5.0,不过我觉得没关系。

UPD:源代码

Pupil.java - 我的持久类

package domain;

public class Pupil {
    private Integer id;
    private String name;
    private Integer age;

    protected Pupil () { }

    public Pupil (String name, int age) {
        this.age = age;
        this.name = name;
    }

    public Integer getId () {
        return id;
    }

    public void setId (Integer id) {
        this.id = id;
    }

    public String getName () {
        return name;
    }

    public void setName (String name) {
        this.name = name;
    }

    public Integer getAge () {
        return age;
    }

    public void setAge (Integer age) {
        this.age = age;
    }

    public String toString () {
        return "Pupil [ name = " + name + ", age = " + age + " ]";
    }
}

Pupil.hbm.xml 是这个类的映射

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="domain" >

    <class name="Pupil" table="pupils">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" not-null="true"/>
        <property name="age"/>
    </class>
</hibernate-mapping>

hibernate.cfg.xml - 休眠配置

<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/hbm_test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>

        <mapping resource="domain/Pupil.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

HibernateUtils.java

package utils;

import org.hibernate.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
    private static final SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new Configuration ().configure ().buildSessionFactory ();
        } catch (HibernateException he) {
            System.err.println (he);
            throw new ExceptionInInitializerError (he);
        }
    }

    public static SessionFactory getSessionFactory () {
        return sessionFactory;
    }
}

Runner.java - 用于测试休眠的类

import org.hibernate.Session;

import java.util.*;

import utils.HibernateUtils;
import domain.Pupil;

public class Runner {
    public static void main (String[] args) {
        Session s = HibernateUtils.getSessionFactory ().getCurrentSession ();

        s.beginTransaction ();
        List pups = s.createQuery ("from Pupil").list ();
        for (Object obj : pups) {
            System.out.println (obj);
        }
        s.getTransaction ().commit ();

        HibernateUtils.getSessionFactory ().close ();
    }
}

我的库:antlr-2.7.6.jar、asm.jar、asm-attrs.jar、cglib-2.1.3.jar、commons-collections-2.1.1.jar、commons-logging-1.0.4。 jar、dom4j-1.6.1.jar、hibernate3.jar、jta.jar、log4j-1.2.11.jar、mysql-connector-java-5.1.7-bin.jar

编译错误:无法解析学生表

【问题讨论】:

  • ide ? jboss工具?是否需要在 jboss 工具首选项中配置连接信息?
  • IntelliJ IDEA 7,休眠 3.2,jdk 1.6。等等,我加代码

标签: java hibernate intellij-idea mapping


【解决方案1】:

我们需要更多信息来帮助您。

这是一个命令行应用程序吗?给出了什么运行时错误?你用的是什么IDE?启用 hibernate 的调试日志记录的输出是什么?

【讨论】:

  • 这是编译错误,IDE是IntelliJ IDEA,从参考资料中我理解应该是一个著名的问题。
  • 请回答其他问题,以便我们为您提供帮助。关于您的错误:那不是编译代码: .cfg.xml 只是一个配置文件。也许如果您链接到您正在使用的示例?
  • 其实我不知道怎么给你看代码。我几乎可以肯定代码没问题并且某些设置存在问题(或者我可能丢失了一些必要的 jar 文件)。我会尝试添加一些东西
【解决方案2】:

您的 IDE 告诉您它找不到表。您可以在 IDEA 中将其更改为仅警告,以便您的项目至少可以编译。

【讨论】:

    【解决方案3】:

    这与 Hibernate 无关,这是一个 IDEA“问题”,您需要正确配置它以在 hbm.xml 中进行表名验证。来自this old thread

    为了让 IntelliJ 提供 正确的代码完成和验证 对于数据库表/列,它需要 了解数据库 你的应用程序的结构也是如此。 所以,我指的是 IntelliJ 数据源。把它想象成一个 “开发时数据源”, 或类似的东西。

    创建一个:
    窗口 -> 工具窗口 -> 数据源
    添加(“加号”图标)-> JDBC 数据源

    作为替代方案,您可以尝试 “日期”中的“导入”按钮 源”工具窗口。这使得 IntelliJ 在你的项目中搜索一些 特定的配置文件(如 “hibernate.cfg.xml”),从中它 可以直接导入数据源 定义。

    但是,如果失败,您可以随时 定义 JDBC 数据源 手动(jdbc url、驱动 jar、驱动 类等)。

    配置好数据源后, 通过打开 SQL 控制台对其进行测试 在它上面(数据源中的“控制台”按钮 工具窗口),然后键入一些 查询。 IDEA 应该提供 SQL 代码 在这里完成,用于表和 列名。

    如果此步骤有效,请转到 数据源的定义,以及 调用

    “刷新表格”。这使得 IntelliJ 检索数据库结构。

    接下来,打开“项目结构” (Ctrl-Shift-Alt-S)。 选择你的 Hibernate 方面(虽然 “分面”或“模块”)。

    休眠的选项屏幕 facet 有一个名为“DataSources 映射”。在这里您可以关联您的 Hiberante 会话工厂 特定的 IntelliJ 数据源。

    这一步之后,SQL表/列代码 完成和验证应该 也可以在 .hbm 文件中工作。

    也适用于 IDEA 7,如有必要,请阅读整个线程。

    【讨论】:

    • 我已经找到了相同的答案(您可以看到这个问题是在大约一年前提出的)。但无论如何它是正确的。
    • @Roman 没问题 :) 实际上,“社区”用户今天早上提出了这个问题,这就是我发布答案的原因。哦,在这种情况下,如果您找到解决方案,请随时发布您自己的答案并接受它。
    【解决方案4】:

    要验证 hbm.xml 文件映射,只需执行以下操作 (Intellij Ultimate 2017.1):

    View -> Tool Windows -> Database -> click (+) sign -> Data Source -> MySQL
    

    您已为数据库服务器添加了数据源。现在您应该创建数据源。下一步是将此数据源添加到休眠映射。跟我来:

    View -> Tool Windows -> Persistence
    

    将打开持久性窗口。您必须看到列出的项目。

    Right click on the project -> Assign Data Sources...
    

    在打开的窗口中,应该有 2 列:“会话工厂”和“数据源”。只需在第二列中添加上面定义的数据源即可。

    【讨论】:

      【解决方案5】:

      File>Settings>Editor>Inspections> 取消勾选 Unresolved database references in annotations

      【讨论】:

      【解决方案6】:

      我猜这不是休眠问题。

      如果您使用 IntelliJ IDEA IDE 并且 IntelliJ IDEA 显示警告说Cannot resolve table 'some-table-name'

      1. 检查您是否正确创建了Data SourceClick here to read how to setup MySQL Data Source

      2. 检查您是否在 IntelliJ IDEA 上正确配置了 Persistence 设置。

      您也可以从here 找到有关此警告的更多详细信息。希望你能找到有用的东西。干杯!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-07
        • 2018-12-29
        相关资源
        最近更新 更多