Jpa 将实体与onetomany映射和@version字段合并会导致删除以前的映射
嗨!全部, 我有两个实体的映射问题。通过Jpa 将实体与onetomany映射和@version字段合并会导致删除以前的映射,jpa,version,one-to-many,Jpa,Version,One To Many,嗨!全部, 我有两个实体的映射问题。通过@OneToMany单向关系映射。我有一个实体工件,它可以有多个版本。下面是我如何映射它们的 @Entity @Table(name = "artifact") public class Artifact implements Serializable { private static final long serialVersionUID = 248298400283358441L; @Id @GeneratedValue(strateg
@OneToMany
单向关系映射。我有一个实体工件
,它可以有多个版本
。下面是我如何映射它们的
@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;
修订表保存已更新的文件名;旧价值和新价值等
我面临的问题是,当我更新工件时;最后一个映射被删除,然后插入一个新的映射,因此,如果生效,我只有最后一个但只有一个版本可用,而不是整个版本历史
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
注释,它就可以正常工作
任务
,它将与修订版
实体进行映射。那么,这里最好的方法是什么也许这不是对你问题的直接回答,但我认为你应该研究HibernateEnvers。我认为它也在做类似的事情。(envers代表实体版本控制)。您只需使用@Audited对实体进行注释,然后将一些侦听器放入配置中,剩下的魔术就完成了。您能详细说明一下吗?从你的回答中我不太明白。这是默认行为吗?我必须使用@Audited annotations和listeners覆盖它吗?不,默认情况下它不可用,您必须将此库添加到类路径,从这里开始:
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
(?, ?)