0

現在、Hibernate を使用してオブジェクトをデータベースに格納する方法を学ぼうとしています。私はhttps://netbeans.org/kb/docs/java/hibernate-java-se.htmlのチュートリアルに取り組んでおり、非常に単純なクラスとテーブルの XML ファイルを作成しようとしています。しかし、私はそれを機能させることがまったくできず、今は本当にイライラしています。私はそれを機能させることができません。

データベースは Postgres 9.2 で、クラスは私が書いたもので、Hibernate のバージョンは Netbeans 7.3 (3.2 だと思います) に同梱されているものです。

表は次のとおりです。

CREATE TABLE sellable.manufacturers
(
  mfr_id serial NOT NULL, -- Manufacturer ID
  mfr_name character varying(127) NOT NULL, -- Manufacturer name
  CONSTRAINT manufacturers_pkey PRIMARY KEY (mfr_id),
  CONSTRAINT manufacturers_mfr_name_key UNIQUE (mfr_name)
);

マップしようとしているクラスは次のとおりです。

package bikeshop.sellable;

import java.io.Serializable;

public class Manufacturer implements Serializable {
    private Integer mfrId   = null;
    private String  mfrName = null;

    public Integer getMfrId () {
        return this.mfrId;
    }

    public String getMfrName () {
        return this.mfrName;
    }

    public void setMfrName (String MfrName) {
        this.mfrName    = MfrName;
    }
}

Hibernate マッピングの 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">
<!-- Generated Aug 21, 2013 7:20:20 PM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="bikeshop.sellable.Manufacturer" table="manufacturers" schema="sellable">
        <comment>Product manufacturers</comment>
        <id name="mfrId" type="int">
            <column name="mfr_id" />
            <generator class="assigned" />
        </id>
        <property name="mfrName" type="string">
            <column name="mfr_name" length="127" not-null="true" unique="true">
                <comment>Manufacturer name</comment>
            </column>
        </property>
    </class>
</hibernate-mapping>

Hibernate プロジェクトの構成は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost/bikeshop</property>
    <property name="hibernate.connection.username">bikeshop</property>
    <property name="hibernate.connection.password">bikeshop</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
    <property name="hibernate.format_sql">true</property>
    <mapping class="bikeshop.sellable.Manufacturer" file="" jar="" package="" resource="bikeshop/mappings/Manufacturers.hbm.xml"/>
    <mapping resource="bikeshop/mappings/Sellables.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

HQL クエリ エディタを使用しようとすると、「select from」クエリが表示されるだけで、明らかに実行できません。実行しようとすると、例外が発生します。

org.hibernate.exception.SQLGrammarException: クエリを実行できませんでした

有効な SQL クエリを生成できないのはなぜですか? 私は何が欠けていますか?

編集:これを機能させようとしてきましたが、別のエラーが発生しています。HQL クエリ ウィンドウに、「データベースからデータを取得できません」というメッセージが表示されるようになりました。例外は「org.hibernate.PropertyNotFoundException: クラス bikeshop.sellable.Manufacturer でプロパティ mfrId のセッターが見つかりませんでした」に変更されました。

構成ファイルは次のように変更されました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost/bikeshop</property>
    <property name="hibernate.connection.username">bikeshop</property>
    <property name="hibernate.connection.password">bikeshop</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
    <property name="hibernate.format_sql">true</property>
    <mapping class="bikeshop.sellable.Manufacturer" file="" jar="" package="bikeshop.sellable" resource="bikeshop/mappings/manufacturer.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

マッピングファイルは次のように変更されました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="bikeshop.sellable.Manufacturer" table="manufacturers" schema="sellable">
        <comment>Product manufacturers</comment>
        <id name="mfrId" type="int">
            <column name="mfr_id" />
            <generator class="native" />
        </id>
        <property name="mfrName" type="string">
            <column name="mfr_name" length="127" not-null="true" unique="true">
                <comment>Manufacturer name</comment>
            </column>
        </property>
  </class>
</hibernate-mapping>

編集 2: 最後の溝の試みとして、すべての製造元メンバーを公開し、アクセス タイプを XML のフィールドに変更しました。

これで、HQL クエリが機能し、結果が返されます。しかし、私は明らかにそのアプローチをとりたくありません。パブリック フィールドは恐ろしい考えです!

4

1 に答える 1

0

問題は、クラスまたはそのメタデータに変更を加えたときに、HQL エディターが常に更新されたクラスまたはメタデータを取得しないことであると思われます。また、これは、外部 XML ファイルまたはインラインのどちらを使用するかに関係なく発生する可能性があるようです。注釈。

これまでに見つけた唯一の回避策は、Netbeans を終了して再起動することです。これにより、HQL クエリ エディターが更新されますが、明らかに非常に面倒です。

于 2013-08-25T11:24:03.067 に答える