我已經有一些名單,看起來像這樣的實體:休眠envers - 裝載歷史嵌套對象
@Entity
@Table(name = "HOME")
@Audited
public class House {
@Id
private Integer id;
@Version
@Column(name = "UPDATE_DATE", nullable = false)
private Date updateDate;
@Column(name = "DESCRIPTION", nullable = false)
private String description;
@Cascade(CascadeType.ALL)
@OneToMany(fetch = FetchType.LAZY, mappedBy = "home", orphanRemoval = true)
private Set<Room> rooms;
[...]
}
同時假定間實體看起來像這樣:
@Entity
@Table(name = "ROOM")
@Audited
public class Room {
@Id
private Integer id;
@Version
@Column(name = "UPDATE_DATE", nullable = false)
private Date updateDate;
@Column(name = "NAME", nullable = false)
private String name;
@Cascade(CascadeType.ALL)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="HOUSE", nullable=false)
private House house;
[...]
}
正如你看到的房間保存着瀑布。讓我們去我的問題的核心...
PRECONDITINS:在房屋目標
當前數據:
House:
description: "red house"
rooms: [room1, room2]
在審覈表中現有的數據:
--- HOUSE_A ---
| REV | REVTYPE | ID | UPDATE_DATE | DESCRIPTION |
+-----+---------+----+-----------------+-------------+
| 111 | 0 | 10 | 2015-08-3 12:00 | red house |
--- ROOM_A ---
| REV | REVTYPE | ID | UPDATE_DATE | NAME | HOUSE |
| 111 | 0 | 100 | 2015-08-3 12:00 | room1 | 10 |
| 111 | 0 | 110 | 2015-08-3 12:00 | room2 | 10 |
使用者步驟:
使用這些數據更新房屋對象(更改房屋描述):
House:
description: "blue house"
rooms: [room1, room2]
在此之後操作審覈表看起來就像這樣:
House:
description: "blue house"
rooms: [room1, room2, room3]
後:這些數據(不改變房屋目標,並添加一個房間)
--- HOUSE_A ---
| REV | REVTYPE | ID | UPDATE_DATE | DESCRIPTION |
+-----+---------+----+-----------------+--------------+
| 111 | 0 | 10 | 2015-08-3 12:00 | red house |
| 112 | 1 | 10 | 2015-08-3 12:30 | blue house |
--- ROOM_A ---
| REV | REVTYPE | ID | UPDATE_DATE | NAME | HOUSE |
| 111 | 0 | 100 | 2015-08-3 12:00 | room1 | 10 |
| 111 | 0 | 110 | 2015-08-3 12:00 | room2 | 10 |
更新房屋目標此操作審計表將如下所示:
--- HOUSE_A ---
| REV | REVTYPE | ID | UPDATE_DATE | DESCRIPTION |
+-----+---------+----+-----------------+--------------+
| 111 | 0 | 10 | 2015-08-3 12:00 | red house |
| 112 | 1 | 10 | 2015-08-3 12:30 | blue house |
--- ROOM_A ---
| REV | REVTYPE | ID | UPDATE_DATE | NAME | HOUSE |
| 111 | 0 | 100 | 2015-08-3 12:00 | room1 | 10 |
| 111 | 0 | 110 | 2015-08-3 12:00 | room2 | 10 |
| 113 | 0 | 120 | 2015-08-3 12:40 | room3 | 10 |
LOAD經審計的內部數據:
--- current result ---
HOUSE_A(last_rev) -> HOUSE_A(112) -> 'blue house' with room1 and room2
--- expected result ---
HOUSE_A(last_rev) -> HOUSE_A(113) -> 'blue house' with room1, room2 and room3
這裏的問題是...
房屋最高版本是112,但我已經做了已保存版本113(轉進入最後不是招操作」因爲房屋對象沒有改變,所以被添加到HOUSE_A)。我知道envers加載所有數據的房屋對象的修訂版本少或相等。在這種情況下,最後的操作將不會被加載。問題是 - 加載這些類型操作(主對象沒有更新)的唯一方法是在保存之前更新主對象(house)的最後更新日期,這樣新的條目將被添加到HOUSE_A,其版本與ROOM_A中的版本相同?
在此之後「處理方法」審覈表看起來就像這樣......
--- HOUSE_A ---
| REV | REVTYPE | ID | UPDATE_DATE | DESCRIPTION |
+-----+---------+----+------------------+--------------+
| 111 | 0 | 10 | 2015-08-30 12:00 | red house |
| 112 | 1 | 10 | 2015-08-30 12:30 | blue house |
| 113 | 1 | 10 | 2015-08-30 12:40 | blue house |
--- ROOM_A ---
| REV | REVTYPE | ID | UPDATE_DATE | NAME | HOUSE |
+-----+---------+-----+------------------+-------+-------+
| 111 | 0 | 100 | 2015-08-30 12:00 | room1 | 10 |
| 111 | 0 | 110 | 2015-08-30 12:00 | room2 | 10 |
| 113 | 0 | 120 | 2015-08-30 12:40 | room3 | 10 |
您是否找到實現此目的的方法?我想這樣做 –