13

私は、休止状態の参照からの例を機能させようとしています。

ID、名前、年齢フィールドを持つ単純なテーブル Pupil があります。すべてのJava-Beansルールに従って、正しい(私が思うに)Javaクラスを作成しました。

参照の例と同じように、構成ファイル-hibernate.cfg.xmlを作成しました。

1 つのクラス Pupil の休止状態マッピングを作成しましたが、ここでエラーが発生しました。

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

IDE で table="pupils" が赤く表示され、「表の生徒を解決できません」というメッセージが表示されます。私はまた、ほとんどのユーザーが例を実行しようとして同じ問題で失敗するという非常に奇妙なメモをリファレンスに見つけました。

ああ..私はこの例に非常に腹を立てています..私見作成者がそのような問題があることを知っている場合、それについての情報を追加する必要があります。

しかし、どうすれば直せますか?ここでの 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

コンパイル エラー: テーブルの生徒を解決できません

4

6 に答える 6

21

これは Hibernate とは関係ありません。これは IDEA の「問題」であり、hbm.xml でテーブル名を検証するように適切に構成する必要があります。この古いスレッドから:

IntelliJ が適切なコード補完とデータベース テーブル/列の検証を提供するためには、アプリケーションのデータベース構造についても知る必要があります。つまり、IntelliJ データソースについて言及しています。「開発時のデータソース」などと考えてください。

作成するには:
Window -> Tool Windows -> Data sources
Add (「プラス」アイコン) -> JDBC data source

別の方法として、[データ ソース] ツール ウィンドウの [インポート] ボタンを試すこともできます。これにより、IntelliJ はプロジェクトで特定の構成ファイル (「hibernate.cfg.xml」など) を検索し、そこからデータソース定義を直接インポートできます。

ただし、それが失敗した場合は、いつでも JDBC データ ソースを手動で定義できます (jdbc url、ドライバー jar、ドライバー クラスなど)。

データソースを構成したら、SQL コンソールを開いてテストし (データソース ツール ウィンドウの「コンソール」ボタン)、いくつかのクエリを入力します。IDEA は、テーブルと列の名前について、ここで SQL コード補完を提供する必要があります。

このステップが機能する場合は、データソースの定義に移動して呼び出します

「テーブルのリフレッシュ」。これにより、IntelliJ がデータベース構造を取得します。

次に「プロジェクト構造」(Ctrl-Shift-Alt-S)を開きます。Hibernate ファセットを選択します (「ファセット」または「モジュール」のいずれか)。

Hibernate ファセットのオプション画面には、「DataSources Mapping」という名前のペインがあります。ここで、Hiberante セッション ファクトリを特定の IntelliJ データソースに関連付けることができます。

この手順の後、SQL テーブル/列コードの補完と検証は .hbm ファイルでも機能するはずです。

IDEA 7 にも適用されます。必要に応じてスレッド全体をお読みください。

于 2010-05-11T04:22:14.653 に答える
1

IDE は、テーブルが見つからないと言っています。プロジェクトが少なくともコンパイルされるように、IDEA で単なる警告に変更できます。

于 2009-06-09T16:43:03.573 に答える
1

あなたを助けるために、もっと多くの情報が必要です。

これはコマンド ライン アプリケーションですか? どのような実行時エラーが発生しますか? どのIDEを使用していますか? hibernate のデバッグ ログを有効にすると、どのような出力が得られますか?

于 2009-06-09T15:06:52.780 に答える