Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate中将元素添加到延迟加载的集合中,而不导致集合加载?_Java_Hibernate_Jpa_Lazy Loading - Fatal编程技术网

Java 如何在Hibernate中将元素添加到延迟加载的集合中,而不导致集合加载?

Java 如何在Hibernate中将元素添加到延迟加载的集合中,而不导致集合加载?,java,hibernate,jpa,lazy-loading,Java,Hibernate,Jpa,Lazy Loading,罐头上写着什么;我想在Hibernate中修改一个集合,而不强制加载该集合,因为它是一个大数据量(~100000条记录,单调递增) 现在,我通过调用getEvents().add(newEvent)将一个元素添加到此列表中,这当然会导致填充events 以下是映射: <bag name = "events" inverse = "true" cascade = "all-delete-orphan" order-by = "event_date desc" lazy = "true"&g

罐头上写着什么;我想在Hibernate中修改一个集合,而不强制加载该集合,因为它是一个大数据量(~100000条记录,单调递增)

现在,我通过调用
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>


我应该如何做到这一点?

实现这一点的一种方法是在父对象(我们称之为父对象)和事件之间创建双向关联,并配置hibernate映射,以便通过事件管理关系

要实现这一点,您的Hibernate映射将如下所示:

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

<class name="Event"...> 
    <many-to-one name="parent">
    ...
</class>
希望这有帮助。祝你好运。

插入事件即可

例如:

@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;

    ....
}
不涉及收藏的选项:

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

然后,当调用document.getEvents()时,它也会查询并获取新事件。唯一的问题是,如果集合已被读取,然后通过选项2插入事件。在这种情况下,getEvents()将不包括新事件,因为集合已被读取

否则,在处理对象方面会有什么副作用?这实际上取决于如何以及何时使用Parent.getEvents()的结果。您可能需要从缓存中重新获取父级和/或使其过期。。。但在大多数典型的情况下,你不需要做任何特殊的事情,它基本上会像blahspam所说的那样“起作用”。
document.add( event );
update( document );
    event = new Event();
    event.setDocument( document );
    insert( event );