gpt4 book ai didi

java - Hibernate Envers - 审计实体无法从空的审计表关系中恢复 ID

转载 作者:行者123 更新时间:2023-11-29 09:32:28 26 4
gpt4 key购买 nike

我需要一些关于 Hibernate Envers 的帮助。我有以下场景:

我在 Hibernate/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 中手动比较修订。

请问有人能帮帮我吗?

谢谢

最佳答案

您将需要对表进行原生 sql 查询并提取 ID。您首先需要提取修订 ID(以进行查询),然后重新请求数据(以使用 native 查询获取必要的 ID)。

关于java - Hibernate Envers - 审计实体无法从空的审计表关系中恢复 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com