0

ええと、エンティティ クラス内に常に id フィールドが必要かどうかを知りたいですか? データベースがまったく必要ない場合でも、エンティティクラスに常に id フィールドを含めるのは悪い習慣だと聞いたことがあります。

私の場合、私はそのようなクラスを持っています:

public class User {
private String firstName = "";
private String lastName = "";
private String personCode = "";
private Date birthDate = new Date();
private Gender gender = Gender.MALE;
private String email = "";
private String password = "";
private UserState userState = UserState.UNAPPROVED;

私の場合、メールアドレスでユーザーを識別します。データベース内のテーブルに相当するこのクラスには、それを一意に識別する追加の userId フィールドがあります。ここで、この Java クラスに idUser フィールドを追加する必要があるかどうか尋ねています。

次のようにHibernateでマップすることができました:

<class
    name="User"
    table="User"
    discriminator-value="U" >

    <!-- <id column="idUser" type="long" /> this one wouldn't even work... -->
    <id name="email" />

    <discriminator column="discriminator" type="string" />

    <property name="firstName" />
    <property name="lastName" />
    <property name="personCode" />
    <property name="birthDate" type="date"/>

   <property name="userState" column="userState" length="15">
         <type name="org.hibernate.type.EnumType">
              <param name="enumClass">com.nortal.pirs.datamodel.enumeration.UserState</param>
              <param name="type">12</param>
          </type>
    </property>

    <property name="password" />

     <property name="gender" column="gender" length="15">
         <type name="org.hibernate.type.EnumType">
              <param name="enumClass">com.nortal.pirs.datamodel.enumeration.Gender</param>
              <param name="type">12</param>
          </type>
    </property>


     <subclass name="Patient" extends="User" discriminator-value="P" >
         <property name="additionalInfo" column="additionalInfo" />

     </subclass>

     <subclass name="SpiProfessional" extends="User" discriminator-value="S" />


</class>

User を拡張する Patient と SpiProfessional が独自の ID を持ち、データベースでのみ表示されるのもちょっとばかげています。

これまでのところ、Patient と SpiProfessional を休止状態で保存することはできませんでした。次のエラーが表示されます。

2012-11-14 07:36:44,265 [main] WARN  org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1054, SQLState: 42S22
2012-11-14 07:36:44,266 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Unknown column 'additionalInfo' in 'field list'

JavaクラスにIDがあることについて誰か説明してもらえますか? また、休止状態でこの問題を解決する方法を知っている人はいますか?

4

1 に答える 1

2

エンティティの理解を定義するのに役立つ場合があります。「データベース バックエンドを備えた単なるオブジェクト」を考えている場合は、全体像を把握できていません。

Eric Evans は、ドメイン駆動設計でエンティティを次のように定義する優れた仕事をしています。

「主にそのアイデンティティーによって定義されるオブジェクトは、ENTITY と呼ばれます。」[エヴァンス 2003]"

ENTITY は、アプリケーションのユーザーにとって重要な属性とは関係なく、ライフ サイクルと区別を通じて継続性を持つものです。[エヴァンス 2003]

ここで注意すべき重要なことは、アプリケーションのどのレベルでも、オブジェクトが一意に識別可能であり、状態が変化する (そしておそらく結果としてイベントをトリガーする) ライフサイクルを持つことが期待される場合、それを一意に識別する属性の概念。

整数ベースの ID は、歴史的に効率のために使用されてきました。異なる属性で繰り返し比較を行うよりも、2 つの数値が等しいかどうかを判断する方が計算上簡単です。

于 2012-11-14T05:57:13.397 に答える