1

私はHibernateを初めて使用し、サンプルのJavaアプリをダウンロードして、より便利になるように変更しました。これまでのところ、私のアプリには、Javaアプリで定義されている2つのdbクラスがあります。Actor.javaとCity.javaです。 .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">
<!-- Generated Jun 17, 2009 11:42:48 AM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="sakila.entity.Actor" table="actor" catalog="sakila">
        <id name="actorId" type="java.lang.Short">
            <column name="actor_id" />
            <generator class="identity" />
        </id>
        <property name="firstName" type="string">
            <column name="first_name" length="45" not-null="true" />
        </property>
        <property name="lastName" type="string">
            <column name="last_name" length="45" not-null="true" />
        </property>
        <property name="lastUpdate" type="timestamp">
            <column name="last_update" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="sakila.entity.City" table="city" catalog="sakila">
        <id name="cityId" type="java.lang.Short">
            <column name="city_id" />
            <generator class="identity" />
        </id>
        <property name="city" type="string">
            <column name="city" length="45" not-null="true" />
        </property>
        <property name="countryId" type="string">
            <column name="country_Id" length="45" not-null="true" />
        </property>
        <property name="lastUpdate" type="timestamp">
            <column name="last_update" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

このアプリはこれまでのところうまく機能しています。しかし、私の質問は、データベース内のActorやCityなどの何百ものオブジェクトを処理できるようにアプリを変更する必要がある場合、すべてのマッピングファイルを定義する必要があるかどうかです。プログラミング時にユーザーがクエリする可能性のあるdbオブジェクトがわからない場合は、すべてを定義する必要がありますが、それは不可能と思われるので、質問は次のとおりです。* .hbm.xmlファイルは必要ですか?ユーザーが必要なオブジェクトをクエリできるアプリを作成する必要があり、データベースに何が含まれているのかさえわからない場合は、そのようなアプリを作成する方法を教えてください。Hibernateで実行可能ですか?

4

4 に答える 4

8

フランク*.hbm.xmlファイルは必要ありません。Hibernateアノテーションは、XMLファイルを使用せずにマッピングを定義するための最新の方法です。XMLマッピングメタデータに加えて、またはXMLマッピングメタデータの代わりに注釈を使用できます。あなたの場合、

@Entity
@Table(name ="actor")
public Class Actor
{
    @Column(name = "actor_id")
    private Short actorId;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "last_update")
    private Timestamp lastUpdate;
}

@Entity
@Table(name ="city")
public Class City
{
    @Column(name = "city_id")
    private Short cityId;

    @Column(name = "city")
    private String city;

    @Column(name = "country_Id")
    private String countryId;

    @Column(name = "last_update")
    private Timestamp lastUpdate;
}

Hibernate Annotationは、メタデータをコードとともにPOJO javaファイルにまとめます。これにより、ユーザーは開発中にテーブル構造とPOJOを同時に理解できます。

于 2013-01-21T05:03:12.380 に答える
1

さて、Hibernateで使用するデータベース内のすべてのテーブルには、アプリケーション側でエンティティを定義する必要があります。このエンティティは、xml構成ファイルまたはアノテーションを使用して定義できます(これは、はるかに「ユーザーフレンドリー」であることを強くお勧めします)。つまり、基本的に1:1の関係を維持する必要があります。

于 2013-01-20T19:13:01.663 に答える
1

システムが非常に動的で、ユーザーがクエリを実行するテーブルがわからない場合、これらのテーブルを対応するPOJOにマッピングする方法がわかりません。Hibernateの主な重点は、主にHibernateクエリ言語(HQL)または使用可能なプログラムAPIの1つを介して、スキーマ内のテーブルをJavaアプリケーション内のオブジェクトにマッピングすることです。

ただし、HQLやクエリAPIを使用するよりも機能がはるかに制限されていますが、HibernateでストレートSQLを使用して、非管理対象オブジェクトを返すことは可能です。これを行うには、次のようなコードを使用します。

createSQLQuery( "SELECT * FROM someTable" ).addTransformer(Transformers.aliasToBean(MyJavaClass.class));

このトランスフォーマーは、SQLクエリの列を名前で指定されたPOJOのプロパティにマップします。実際には、型変換は困難であり、多くの場合.setScalarが必要です。マップのリストを返すTransformers.aliasToEntityMapを使用することもできます。ここで、各マップは列名から値へのマッピングです。

これについては、現在のHibernateCoreドキュメントのセクション18.1.5で簡単に説明されています。

于 2013-01-21T03:23:35.123 に答える
1

データベースに対してクエリを実行する必要がある場合は、検索するテーブルを知っていると思います。Netbeansは、すべての.hbmファイルと.javaファイルを自動的に作成します。リンクを確認してください-http://netbeans.org/kb/docs/web/hibernate-webapp.html#05

于 2013-01-21T06:00:01.547 に答える