2

私はエンティティBeanを実際に操作することはできませんが、現在、エンティティBeanは私を見つめています。

相互に関連するテーブルがいくつかありますが、外部キーがなく、追加することはできません。この質問では、データベースを変更することはできません。変更することはできませんが、別のソリューションとしてビューを作成する場合があります。いずれかの方法...

私は3つのテーブルを持っています。LOCATION、LINKS、ENDPOINT、および追加のソルトについては、LINKS_TYPEテーブルを使用します。

LOCATIONテーブルには、ロケーションIDを含む文字列である主キーLOCATIONIDがあります。

LINKSテーブルには、主キーとしてLINKIDがあり、ENDPOINTの主キーを含む列LINK_ATTR_VALUE_A、LOCATIONの主キーを含む列LINK_ATTR_VALUE_Bがあります。LINKS_TYPE主キーを含む列LINKTYPEID

ENDPOINTテーブルには主キーPOINTIDがあります

LINKS_TYPEには、主キーLINKTYPEID、列LINKTYPEA(リンク先のテーブル名を定義するテキスト文字列)、列LINKTYPEB(リンク先のテーブル名を定義するテキスト文字列)があります。

LINKS_TYPEが言及されていても、データベースのこのインスタンスには他のリンクがないため、今はそれについて心配する必要はありません。

LOCATIONエンティティの「ListendPoints」にメンバーを定義したいと思います。これは、私の理解では@OneToManyになります。ここで役立つ外部キーはなく、これまでにないことを覚えておいてください。

これは私が定義したマッピングです...

@OneToMany ( cascade=CascadeType.ALL)
@JoinTable ( name = "ENDPOINT",
             joinColumns = @JoinColumn ( 
                                name = "LINK_ATTR_VALUE_B"
                            ),
             inverseJoinColumns = 
                            @JoinColumn ( 
                                name = "LINK_ATTR_VALUE_A"
             )
            )
private List<EndPoint> endPoints;

このことから、私が何をしているのかわからないことに気付く可能性が非常に高いです:Dしかし、ドキュメントがあまりにも素晴らしく、ejb 3の助けを求める本を注文しましたが、この前に本を完成させる時間がありません。マッピング:D

TopLinkをjdeveloper11gで使用しており、そのweblogicサーバーとoracle10gをデータベースとして使用しています。

serviceFacadeクライアントを使用してクエリを実行すると、すべてが正しく表示されました(それ以降、ワークスペースが停止し、クライアントを機能させるためにプロジェクトを再作成する必要があります)。私の意見では、適切なデータを取得するための完璧なクエリが生成されます。しかし、それは結果なしで終わります。

何が必要かわからないので、できるだけ多くの情報を提供したいと思います。しかし、私のマッピングがおそらく間違っていることはわかっています。それは、マッピングを理解していないためです。

誰かが私を助けてもらえますか?

ありがとうございました。

4

2 に答える 2

2

LINKSテーブルは、1対多ではなく、LOCATIONとENDPOINTの間の多対多のマッピングテーブルのように見えます。ここでの大きな問題は、以外に追加の列があるかどうかLINKIDLINK_ATTR_VALUE_AそしてLINK_ATTR_VALUE_Bあなたがリストしたかどうかです。

含まれている場合は、別のエンティティとしてマップする必要があります。双方向の1対多としてマップされ
Locationたコレクションがあり、Links
LinkLocationEndPoint

OTOH、LINKSに他の列がなく、その主キー(多対多の結合テーブルには不要であり、マップすることもできません)を放棄する場合は、多対多のコレクションとしてマップできますEndPoint son Location

質問を明確にできる場合は、必要に応じて実際のマッピングを含めるように回答を更新します。

于 2009-07-28T17:43:00.657 に答える
0

これが私が終了したマッピングです。

@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name = "LINK",
    joinColumns = {
            @JoinColumn(name="LINK_ATTR_VALUE_B")
        },
           inverseJoinColumns = {
            @JoinColumn(name="LINK_ATTR_VALUE_A")
           }
)
private List<EndPoint> endPoints;

LINKテーブルには、現時点で必要な値はまったくありません。しかし、その時が来たら、DBAは私たちのためにマテリアライズドビューを作成する必要があります。

しかし、マッピングを試みるとき、私は最初に、 endPointに直接行くのではなく、 LINKを維持しました。私は、133しかないはずの5000以上のリンクを返していました。それで、私が理解できないマッピングがありますが、後でそれを残しておきます。

現在、データベースには1つのリンクタイプしか含まれていません。これは変更されます。実際には、マッピングにwhere句を追加する方法があったので、タイプごとに異なる属性マッピングを作成できました。

今日はタイピング気分です:-D

于 2009-07-29T15:29:05.750 に答える