2017-08-17 73 views
0

問題「保存與實體ID的區別」對待實體,我發現了以下的答案:ID爲NULL作爲新

「對於實體Id屬性不能爲空,所以你需要映射這個類,爲的ValueObject。如果是這樣, Id屬性被視爲常規屬性,並且不會轉到此對象的GlobalId。「

我的問題是:

爲什麼不能在實體視爲新如果ID爲NULL?

我有一個從數據庫中提取的對象圖,兩個javers之間提交了一個實體添加到圖中的列表。

  1. 兩次提交,並在第二承諾有一個新的實體(同上NULL)
  2. 獲取的變化=> exeption因爲Javers無法創建GlobalId。

我可以通過做EntityManager - 堅持(創建Id:s),但我想避免這樣做。目前的代碼可能會在稍後執行,或者只是讓交易完成。

由於Id爲NULL,因此實體爲NEW。是否有可能生成一個唯一的臨時Id(允許Id = NULL)能夠創建GlobalId? 在更改列表中,實體將被報告爲NEW。無需與以前的提交進行比較。

回答

0

你應該比較/提交你的對象,當他們完全初始化,所以當他們有ID。

  • 它不能相對於其它實體/版本(差異算法基於GlobalIds)
  • 它能」:

    無標識的實體不能被JaVers幾個原因處理從JaVersRepository中查詢(查詢使用GlobalIds)

如果您使用的是Hibernate,那麼在Hibernate從序列中爲它們分配ID後,比較/提交新對象。

另一種選擇:

  • 如果實體不具有商業標識,你可以在構造和使用產生UUID不使用生成的序列值作爲JaVers標識,但一些企業標誌
  • 它作爲JaVers ID(並且如果你喜歡,還包括數據庫PK)