【发布时间】:2012-01-13 07:15:19
【问题描述】:
嗨!全部,
我有两个实体的映射问题。通过@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实体进行映射。那么这里最好的方法是什么?
【问题讨论】:
标签: jpa version one-to-many