使用TRANSIENT使GORM休眠对象

时间:2019-07-12 05:14:33

标签: hibernate grails gorm

我想在我的grails应用程序中做的是创建许多临时对象,并且当时间合适时...如果时间合适,那么我将保留所有对象。在某些情况下,时间永远是不正确的,因此将它们扔掉并收集垃圾。

但是如果我编写这样的代码:

    CollectingEvent collectingEvent = new CollectingEvent()
    CollectionUnit collectionUnit = new CollectionUnit()

    collectionUnit.collectingEvent = collectingEvent
    collectingEvent.collectionUnits.add(collectionUnit)

然后我将得到一个java.lang.NullPointerException,因为collectionUnits没有初始化为有效的集合。

目前尚不清楚我是否应该尝试在CollectingEvent对象中对其进行初始化,或者是否确实想在该对象中使用哪种语法:

class CollectingEvent {
    static hasMany = [collectionUnits: CollectionUnit]
}

我是要执行我在GORM /休眠库中应该做的事情吗?还是我必须将所有数据存储在其他位置,并且仅在确定要持久保存GORM对象时填充它?

1 个答案:

答案 0 :(得分:0)

暂时性问题与NullPointerException无关。

请尝试详细解释您所说的瞬态是什么意思,为什么通常的new CollectionEvent()而不保存该对象不起作用。

NullPointer

GORM在后台使用了Hibernate,但是在其上面放置了active record层。

因此,当您要将addTo*添加到另一个域类的集合时,应使用Domain Class方法。就像将CollectionUnit添加到CollectionEvent一样。

您的代码应如下所示:

    CollectingEvent collectingEvent = new CollectingEvent()
    CollectionUnit collectionUnit = new CollectionUnit()

    collectingEvent.addToCollectionUnits(collectionUnit)

此外,您的CollectionUnit类应声明它属于CollectionUnit。我猜想CollectionUnit的生命周期取决于CollectionEvent,不是吗?

 static belongsTo = [collectingEvent: CollectingEvent]