Hibernate错误:无法解析表

时间:2009-06-09 14:59:00

标签: java hibernate intellij-idea mapping

我正在尝试从hibernate引用开始工作。

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

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

我为一个Pupil类创建了hibernate映射,这是发生的错误。

<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的配置

<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 - 用于测试hibernate的类

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 ();
    }
}

我的libs: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

  

编译错误:无法解析表瞳孔

5 个答案:

答案 0 :(得分:19)

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

  

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

     

创建一个:
  窗口 - &gt;工具Windows - &gt;数据来源
  添加(“加”图标) - &gt; JDBC数据源

     

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

     

然而,如果失败,你可以随时   定义JDBC数据源   手动(jdbc url,驱动程序jar,驱动程序   上课等。)

     

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

     

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

     

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

     

接下来,打开“项目结构”   (CTRL-Shift + Alt键-S)。   选择你的Hibernate方面(但是   “Facets”或“Modules”。

     

Hibernate的选项屏幕   facet有一个名为“DataSources”的窗格   映射“。在这里你可以关联你的   Hiberante会议工厂用   特定的IntelliJ数据源。

     

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

也适用于IDEA 7,必要时阅读整个帖子。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您的IDE告诉您无法找到该表。您可以将其更改为IDEA中的警告,以便您的项目至少可以编译。

答案 3 :(得分:1)

文件>设置>编辑器>检查>取消注释中未解析的数据库引用

答案 4 :(得分:0)

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

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

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

View -> Tool Windows -> Persistence

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

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

在打开的窗口中,应该有两列:&#34;会话工厂&#34;和&#34;数据源&#34;。只需在第二列中添加上面定义的数据源。