0

私は2つのテーブルを持っています:

Table A
   Id (primary key)
   Name
   request_Id 



Table B
   request_Id (primary key)
   request_param

これら2つのテーブル間の関係はrequest_idによるものですが、外部キー制約はありません。つまり、テーブルBにそのrequest_idのレコードがなくても、テーブルAにレコードが存在する可能性があります。 A->Bからの一方向の関係

以下は、2つのテーブルの注釈付きマッピングです。

@Entity...
class A
{
   @Id
   private int id;
   @Column
   private String Name;
   @Column(name="request_id")
   private String requestId
   @ManyToOne(optional = true)
   @JoinColumn(name="request_id", insertable=false, updatable=false)
   private B b;
}

@Entity...
class B
{
   @Id
   @Column(name="request_id")
   private String requestId;
   @Column(name="param")
   private String param;
}

このテーブルデータを検討してください。

  table A
    id = 1
    name = "temp"
    request_id = "A"

Bにはレコードがありません

Bに対応するレコードがないAのレコードのエンティティAをロードすると、「org.hibernate.ObjectNotFoundException:指定された識別子の行が存在しません」という例外が発生します。

SQLを出力すると、2つのクエリが表示されます。1つはテーブルAのクエリで、テーブルBの外部結合があり、もう1つはテーブルBのクエリです。

なぜそうなるのかわかりません。DBで最初のクエリを実行すると、正常に機能します。誰かが私が間違っていることを指摘したり、問題を解決するためのいくつかの指針を提供したりできますか?

4

1 に答える 1

0

テーブルBにレコードがない場合に、テーブルAにnull以外の値が含まれる唯一の理由は、テーブルBが後から付け加えられたものであるためです。テーブルBにレコードがある場合、デザインはいくつかのタスクを実行するという要件に対応します。それ以外の場合、プロセスは終了します。

私は使用を避けて@NotFoundいましたが、他に選択肢はないと思いますか、同じテーブルデザインを維持することはできますか?

于 2012-06-15T07:09:02.930 に答える