Ошибка гибернации: не удается разрешить таблицу - PullRequest
8 голосов
/ 09 июня 2009

Я пытаюсь заставить работать пример из ссылки на спящий режим.

У меня есть простая таблица Pupil с полями id, name и age. Я создал правильный (как мне кажется) java-класс для него в соответствии со всеми правилами java-beans.

Я создал файл конфигурации - hibernate.cfg.xml, как в примере из справочника.

Я создал отображение спящего режима для одного класса Pupil, и здесь произошла ошибка.

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

table = "ученики" красные в моей 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-collection-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

Ошибка компиляции: невозможно разрешить зрачки таблицы

Ответы [ 4 ]

19 голосов
/ 11 мая 2010

Это не имеет ничего общего с Hibernate, это «проблема» IDEA, и вам необходимо правильно настроить ее для проверки имен таблиц в hbm.xml. От этой старой темы :

Чтобы IntelliJ предоставил правильное завершение кода и проверка для таблиц / столбцов базы данных требуется знать о базе данных структура вашего приложения. Итак, я имею в виду Источник данных IntelliJ. Думайте об этом как "источник данных времени разработки", или что-то в этом роде.

Для создания:
Окно -> Инструменты Windows -> Источники данных
Добавить (значок «плюс») -> JDBC источник данных

В качестве альтернативы вы можете попробовать Кнопка «Импорт» в поле «Дата» окно инструментов источников. Это делает IntelliJ ищет ваш проект для некоторых конкретные файлы конфигурации (например, "hibernate.cfg.xml"), из которой он может напрямую импортировать источник данных определение.

Однако, если это не удастся, вы всегда можете определить источник данных JDBC вручную (JDBC URL, драйвер JAR, драйвер класс и т. д.).

Как только вы настроили источник данных, проверить это, открыв консоль SQL на нем (кнопка "консоль" в источнике данных окно инструментов), и введите некоторые запросы. IDEA должна предоставить код SQL завершение здесь, для таблицы и имена столбцов.

Если этот шаг работает, перейдите к определение источника данных и вызова

«Обновить таблицы». Это делает IntelliJ получить структуру базы данных.

Далее откройте «Структура проекта» (Ctrl-Shift-Alt-S). Выберите свой аспект Hibernate (хотя либо "Грани", либо "Модули").

Экран настроек для Hibernate фасет имеет панель с именем «Источники данных» Mapping ". Здесь вы можете связать свой Hiberante сессионный завод с конкретный источник данных IntelliJ.

После этого шага код таблицы / столбца SQL Завершение и проверка должны работать также в файлах .hbm.

Относится также к IDEA 7, при необходимости прочитайте всю ветку.

1 голос
/ 09 июня 2009

Ваша IDE сообщает, что не может найти стол. Вы можете изменить его на предупреждение в IDEA, чтобы ваш проект хотя бы компилировался.

1 голос
/ 09 июня 2009

Нам нужно значительно больше информации, чтобы помочь вам.

Это приложение командной строки? Какая ошибка во время выполнения выдается? Какой IDE вы используете? Каковы результаты включения ведения журнала отладки в hibernate?

0 голосов
/ 29 июня 2017

Чтобы проверить сопоставления файлов 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 столбца: «Фабрика сеансов» и «Источник данных». Просто добавьте определенный источник данных выше во втором столбце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...