6

锡纸上写着什么;我想在不强制加载集合的情况下修改 Hibernate 中的集合,因为它是大量数据(约 100,000 条记录,单调增加)。

现在,我通过调用添加一个元素到这个列表中,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

实现此目的的一种方法是在父对象(我们称其为父对象)和事件之间创建双向关联,并配置您的休眠映射,以便该关系由事件管理。

为此,您的 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 回答