0

Hibernate、Spring、GWTアプリケーションがあります。Employeeとuserの2つのテーブルがあります。

すべてのユーザーは従業員であるため、データベースに1対1の関係があり(主キーによって結合されています)、ユーザーはEmployeeを拡張します。最初にユーザーを挿入すると問題なく動作し、親が正しく自動的に挿入されます。ただし、問題は、既存の従業員のユーザーエントリを追加しようとすると、親IDを使用してユーザーレコードを挿入する代わりに、従業員レコードとユーザーレコードが再作成されることです。

 @javax.persistence.Entity
 @javax.persistence.Table(name = "User")
 @Inheritance(strategy = InheritanceType.JOINED)
 @PrimaryKeyJoinColumn(name="Id")
 public class User extends Employee
 { .... }

 @Reflectable(assignableClasses = true, superClasses = true)
 @javax.persistence.Entity
 @javax.persistence.Table(name = "Employee")
 @Inheritance(strategy = InheritanceType.JOINED)
 @PrimaryKeyJoinColumn(name="Id")
 public class Employee
 { 
      @Id
      @GeneratedValue
      @Column(name="Id")
      public Integer getId()
      {
        return id;
      }
 }

これは物事を行うための正しい方法ですか?どうすればこれを克服できますか?

どうもありがとうございます。


アップデート1:

これにユーザーを追加するということは、従業員と同じIDを持つユーザーを作成したいということです。これは基本的に次のようになります。

    Insert into User (Id, username,..) Values (1, "Username", ...)
4

2 に答える 2

2

既存のマッピングは意味がないと思います。

継承を破棄し、EmployeeとUserAccountの間の1対1(または1対多)の関係をマッピングすることをお勧めします。

それはあなたのモデルをよりよく反映していると思います。

従業員は、システムのユーザーである場合とそうでない場合があります。そのシステムにユーザーアカウントを持っている従業員。

今後さらにシステムを追加する場合は、1対多を使用してください。従業員は、ゼロ、1つ、または複数のシステムにユーザーアカウントを持っています。

于 2012-07-14T18:11:21.603 に答える
0

私があなたの説明を最初に読んで、あなたのコードスニペットによって確認したとき、何かが正しく座っていません。

あなたが言ったいくつかのことは私がポイントに分解します:

  • すべてのユーザーは従業員です
  • 私はOneToOne関係を持っています
  • ユーザーは従業員を拡張します
  • 既存の従業員のユーザーエントリを追加しようとすると

意味がありません。

すべてのユーザーは従業員でありUser extends Employee、(ある程度)理にかなっていますが、なぜ1対1の関係について言及したのですか?コードからもわかるように、ここでは関係はありません。

AUserはですがEmployee、ユーザーは従業員を所有しておらず、従業員はユーザー属性(「関係」の意味)を所有していません。

関係は、たとえば、従業員がアドレスを持っている、またはユーザーがPermissionListを持っているなどです。

そして最後のポイントで、「既存の従業員のユーザーエントリを追加する」と言った場合、この場合、aは1対1ではなく、おそらくaUserの属性であると想定されていることを示しています(「追加」したいため)それに)。EmployeeList

一歩下がると、英語の意味でEmployeeaを所有していないので、あまり意味がありません。User

サブクラス/スーパークラスは通常、より抽象型の特定の型を記述するためのものです。例えば。犬は特定の種類の動物Dogであるため、はのサブクラスです。Animal私はあなたがここで何を望んでいるとは思いません。

私はあなたがあなたのデザインを再考する必要があると思います、そしてあなたがやろうとしていることを説明するかもしれません。

于 2012-07-13T20:06:28.070 に答える