Java 如何在Hibernate中将元素添加到延迟加载的集合中,而不导致集合加载?
罐头上写着什么;我想在Hibernate中修改一个集合,而不强制加载该集合,因为它是一个大数据量(~100000条记录,单调递增) 现在,我通过调用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
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 );