6

ブリキに書かれていること。コレクションは大量のデータ (〜 100,000 レコード、単調に増加) であるため、コレクションを強制的にロードせずに Hibernate でコレクションを変更したいと考えています。

今、私はこのリストに要素を追加します。getEvents ().add (newEvent)もちろん、これによってeventsデータが取り込まれます。

マッピングは次のとおりです。

<bag name = "events" inverse = "true" cascade = "all-delete-orphan"
 order-by = "event_date desc" lazy = "true">
  <key>
<column name = "document_id" length = "64" not-null = "true" />
  </key>
  <one-to-many class = "EventValue" />
</bag>

これをどのように行う必要がありますか?

4

2 に答える 2

5

これを実現する1つの方法は、親オブジェクト(親オブジェクトと呼びましょう)とイベントの間に双方向の関連付けを作成し、関係がイベントによって管理されるように休止状態のマッピングを構成することです。

これを実現するために、Hibernateマッピングは次のようになります。

<class name="Parent"...>
    ...
    <bag name="events" lazy="true" inverse="true"...>...</bag>
    ...
</class>

<class name="Event"...> 
    <many-to-one name="parent">
    ...
</class>

そして、あなたのコードは何かに見えるでしょう:

myEvent.setParent(parentObject);
eventDao.save(myEvent);

お役に立てれば。幸運を。

于 2009-05-07T23:06:18.903 に答える
0

イベントを挿入するだけです。

例えば ​​:

@Entity
public Document
{
    @ManyToOne
    Set<Event> events;

    public void addEvent( Event event )
    {
        events.add( event )
    }

}


@Entity
public Event
{
    @id
    private long id;

    @OneToMany
    private Document  doc;

    ....
}

すべてのイベントを読み取るオプション:

document.add( event );
update( document );

コレクションに触れないオプション:

    event = new Event();
    event.setDocument( document );
    insert( event );

次に、 document.getEvents() を呼び出すと、新しいイベントも照会して取得します。唯一の問題は、コレクションが既に読み取られている場合に、オプション 2 でイベントを挿入する場合です。その場合、コレクションが既に読み取られているため、getEvents() には新しいイベントが含まれません。

于 2009-05-08T18:02:41.503 に答える