0
嗨!全部,合併實體與onetomany映射和@version字段導致刪除以前的映射
我有兩個實體的映射問題。通過@OneToMany
單向關係映射。我有一個實體Artifact
,它可以有多個Revision
。以下是我已經映射他們
@Entity
@Table(name = "artifact")
public class Artifact implements Serializable {
private static final long serialVersionUID = 248298400283358441L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Version
private Integer version;
...
@OneToMany(cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE })
@JoinTable(name = "artifact_revisions", joinColumns = @JoinColumn(name = "artifact_id"), inverseJoinColumns = @JoinColumn(name = "revision_id"))
private Set<Revision> revisions;
而修訂實體
@Entity
@Table(name = "revision")
public class Revision implements Serializable {
private static final long serialVersionUID = -1823230375873326645L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
@Column(name = "date_created", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
修訂表保存一個更新的申請名稱;舊值和新值等。
我面對的問題是,當我更新神器;最後一個映射被刪除,然後它插入一個新的映射,所以如果有效,我只有最後一個修訂版本可用,而不是整個修訂歷史記錄。
Hibernate:
update
artifact
set
description=?,
estimate=?,
name=?,
rank=?,
status=?,
sysId=?,
version=?
where
id=?
and version=?
Hibernate:
delete
from
artifact_revisions
where
artifact_id=?
and revision_id=?
Hibernate:
insert
into
artifact_revisions
(artifact_id, revision_id)
values
(?, ?)
如果我從工件中刪除@version
註釋,它可以正常工作。
- 這是因爲我是以錯誤的方式映射關係嗎?這個關係應該映射爲一個元素集合嗎?
- 還有另一個實體
Task
它將被映射到Revision
實體。那麼這裏最好的辦法是什麼?
請您詳細說明一下嗎?我從你的回答中瞭解不多。這是默認行爲,我必須使用@Audited註釋和偵聽器來覆蓋它? – 2012-01-17 05:25:36
不,默認情況下不可用,您必須將此lib添加到您的類路徑中,從此處開始:http://docs.jboss.org/envers/docs/index.html#quickstart – PiotrkS 2012-01-18 15:17:22