2012-02-14 5 views
0

他のサイト(とここ)で数回質問しましたが、本当に答えが見つからなかったので再試行します。私はまったく新しい休止状態です、そして、私は休止状態のフォーラムで掲示するのが怖いです。私は主にJPAアノテーションをHibernate 3.6で使用しています。ディスクリミネータ/継承を使用してテーブルを持たない空のエンティティやエンティティを管理する方法

私は、次のスキーマを持っている: Schema

だから、基本的に、これは従来のDBです。指名は、中央テーブルであり、Iは、ノミネートの4つの特定のタイプを有する:(唯一の属性として指名テーブルの列を使用して)

  1. 同僚
  2. チーム(指名+ TEAM_NOMテーブル)
  3. イデア(指名+ IDEA_NOMをテーブル)
  4. 成功(指名+ SUCCESS_NOMテーブル)

それでは、私がやったことは彼らの実体を確立するための識別器(および継承)を使用しています。たとえば:

ここエンティティノミネーションです:

@Entity(name = "Nomination") 
    @Table(name = "NOMINATION") 
    @DiscriminatorColumn(name="CATEGORY_CODE", discriminatorType = DiscriminatorType.STRING, length = 1) 
    @Inheritance(strategy=InheritanceType.JOINED) 

    public abstract class Nomination extends AuditableEntity { 

そして、ここでは、私はチームの、アイデアや成功エンティティをコーディングしています方法は次のとおりです。

@Entity(name = "TeamNom") 
    @Table(name = "TEAM_NOM") 
    @DiscriminatorValue("T") 
    @PrimaryKeyJoinColumn(name = "NOM_ID") 

    public class TeamNom extends Nomination { 

今同僚のために、私は次のようでした:

@Entity(name = "CoworkerNom") 
    @DiscriminatorValue("C") 
    @PrimaryKeyJoinColumn(name = "NOM_ID") 

    public class CoworkerNom extends Nomination { 

ご覧のとおり、大きな問題があります。 Hibernateは "CoworkerNom"というテーブルを探していますが、DBには何もありません。私はアイデアが足りないので「ノミネート」をテーブルとして入れてみましたが、論理的にはそれは循環性の依存エラーです。

したがって、テーブルを持たず属性を持たないこのエンティティにどうやってアプローチしますか?他のエンティティは明らかに正常に動作しています。

+1

ドメインクラスをDAOクラスに混ぜているように見えます。 CoworkerNomはテーブルではないので、なぜそれをマップしようとしていますか?あなたがしたいことをする方法があるかもしれませんが、わかりません。ノミネーションを具体的なクラスにして、ノミネーションから*を選択したデータベースビュー名CoworkerNomを作成し、上記のようにエンティティ名をビューの名前に変更してマッピングすることができます。 –

+0

私はこれを議論しました.Coworkerというテーブルを作ってIDだけをダンプすることも考えました。興味深い解決策ですが、私はむしろこれをHibernate経由でアプローチしたいと思います。いずれにしても返信をありがとう、私はそれを検討します。 – Nimchip

答えて

1

ハイバネーションでは、ノミネートの各サブクラスの属性を持つテーブルを作成する必要があるため、実際にはこのテーブルにはIDが設定されています。この背後にある根拠は、将来的にこのサブクラスを特定のプロパティで拡張したい場合は、アノテーションやスキーマを変更することなく行うことができます。

関連する問題