我需要一些關於Hibernate Envers的幫助。我有以下情形:Hibernate Envers - 審計實體無法從空的審計表關係中恢復ID
我有休眠/ JPA一個實體,這個實體有一個正常的配置:
package com.algar.fsw.siscos.model;
/**
* TbUsuario generated by hbm2java
*/
@Entity
@Table(name = "SCCTB023_USUARIO")
@Audited
@AuditTable("SCCTB047_USUARIO_ADTRA")
public class Usuario implements java.io.Serializable {
@Id
@Column(name = "NU_USUARIO", nullable = false, scale = 0)
@NotNull
private Long id;
@Column(name = "NO_USUARIO", nullable = false, length = 50)
@NotNull
@Length(max = 50)
private String nome;
@Column(name = "NO_LOGIN", unique = true, nullable = false, length = 16)
@NotNull
@Length(max = 16)
private String login;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "NU_PERFIL", nullable = false)
private Perfil perfil = new Perfil();
@OneToMany(fetch = FetchType.LAZY, mappedBy = "usuario" , cascade = CascadeType.ALL)
private List<UsuarioGrupo> usuariosGrupos = new ArrayList<UsuarioGrupo>();
public Usuario() {
}
public Usuario(Long id) {
this.id = id;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public List<UsuarioGrupo> getUsuariosGrupos() {
return usuariosGrupos;
}
public void setUsuariosGrupos(List<UsuarioGrupo> usuariosGrupos) {
this.usuariosGrupos = usuariosGrupos;
}
}
而且,這種實體與該實體的關係:
package com.algar.fsw.siscos.model;
@Entity
@Table(name = "SCCTB018_PERFIL")
@Audited
@AuditTable("SCCTB042_PERFIL_ADTRA")
public class Perfil implements java.io.Serializable {
@Id
@Column(name = "NU_PERFIL", nullable = false, scale = 0)
@NotNull
private Long id;
@Column(name = "NO_PERFIL", nullable = false, length = 30)
@NotNull
@Enumerated(EnumType.STRING)
private PerfilEnum perfilEnum;
@Column(name = "IC_ATIVO", nullable = false, precision = 1, scale = 0)
private boolean ativo = true;
@Column(name = "NU_NIVEL", nullable = false, precision = 1, scale = 0)
private Long nivel;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return perfilEnum.toString();
}
public boolean isAtivo() {
return ativo;
}
public void setAtivo(boolean ativo) {
this.ativo = ativo;
}
public Long getNivel() {
return nivel;
}
public void setNivel(Long nivel) {
this.nivel = nivel;
}
public PerfilEnum getPerfilEnum() {
return perfilEnum;
}
public void setPerfilEnum(PerfilEnum perfilEnum) {
this.perfilEnum = perfilEnum;
}
}
當我檢索Usuario信息時,一切正常,但是當我調用方法getPerfil由於關係的ID,我收到NoEntityFoundException。數據僅存在於常規表中,在審計表中數據不存在,因爲審計表是在原始表中已存在數據之後創建的,因此沒有記錄被放置在審計表上。我只需要恢復ID,我不需要來自Perfil的數據。所以,如果我撥打getPerfil,我唯一需要的是ID信息。
有沒有人知道這種問題的解決方法或解決方案?
我需要這個的原因是因爲一個WEB應用程序有一個顯示某些實體中的變化的屏幕,顯示的值爲:date_created,property_changed,value_before和value_after。所以我構建了一個邏輯來在java中手動比較修訂版本。
請問誰能幫助我?
感謝
我有同樣的問題,你知道一種方式來產生'0'修訂? –
只需將現有表中的所有數據複製到'0'修訂版。 – adamw