(org.hibernate.LazyInitializationException)org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话

时间:2016-04-07 22:54:34

标签: java hibernate postgresql

我开始学习使用Java开发Web系统的hibernate,但是我在编写和使用类时遇到了一些问题。

我有两个表:tblusuario和tblperfilusuario,tblusuario使用tblperfilusuario创建外键,即用户conté配置文件。

使用Postgres数据库+ Netbeans和Hibernate 4.3.1

TblUsuario实体:

    @Entity
@Table(name = "tblusuario", schema = "public")
@AttributeOverride(name = "id", column = @Column(name = "codigousuario"))
@SequenceGenerator(name = "id_sequence",
        sequenceName = "tblusuario_codigousuario_seq",
        allocationSize = 1)
public class TblUsuario extends BaseEntityInt {

    private TblPerfilUsuario tblperfilusuario;
    private String nome;
    private String usuario;
    private String senha;

    public TblUsuario() {
    }

    public TblUsuario(String nome, String usuario, String senha) {
        this.nome = nome;
        this.usuario = usuario;
        this.senha = senha;
    }

    public TblUsuario(TblPerfilUsuario tblperfilusuario, String nome, String usuario, String senha) {
        this.tblperfilusuario = tblperfilusuario;
        this.nome = nome;
        this.usuario = usuario;
        this.senha = senha;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "codigoperfilusuario")
    public TblPerfilUsuario getTblperfilusuario() {
        return this.tblperfilusuario;
    }

    public void setTblperfilusuario(TblPerfilUsuario tblperfilusuario) {
        this.tblperfilusuario = tblperfilusuario;
    }

    @Column(name = "nome", nullable = false, length = 100)
    public String getNome() {
        return this.nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Column(name = "usuario", nullable = false, length = 40)
    public String getUsuario() {
        return this.usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    @Column(name = "senha", nullable = false, length = 20)
    public String getSenha() {
        return this.senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

}

TblPerfilUsuario实体:

    @Entity
@Table(name = "tblperfilusuario", schema = "public")
@AttributeOverride(name = "id", column = @Column(name = "codigoperfilusuario"))
@SequenceGenerator(name = "id_sequence",
        sequenceName = "tblperfilusuario_codigoperfilusuario_seq",
        allocationSize = 1)
public class TblPerfilUsuario extends BaseEntityInt {

    private String nome;
    private boolean ativo;
    private Set<TblUsuario> tblusuarios = new HashSet(0);

    public TblPerfilUsuario() {
    }

    public TblPerfilUsuario(String nome, boolean ativo) {
        this.nome = nome;
        this.ativo = ativo;
    }

    public TblPerfilUsuario(String nome, boolean ativo, Set<TblUsuario> tblusuarios) {
        this.nome = nome;
        this.ativo = ativo;
        this.tblusuarios = tblusuarios;
    }

    @Column(name = "nome", nullable = false, length = 100)
    public String getNome() {
        return this.nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Column(name = "ativo", nullable = false)
    public boolean isAtivo() {
        return this.ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "tblperfilusuario")
    public Set<TblUsuario> getTblusuarios() {
        return this.tblusuarios;
    }

    public void setTblusuarios(Set<TblUsuario> tblusuarios) {
        this.tblusuarios = tblusuarios;
    }

}

每次我尝试使用 TblUsuario.tblperfilusuario.getNome()时都会出现以下错误:

  

e =(org.hibernate.LazyInitializationException)org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话

任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

在TblUsuario类中将注释@ManyToOne(fetch = FetchType.LAZY)更改为@ManyToOne(fetch = FetchType.EAGER)。

例如:

public class TblUsuario extends BaseEntityInt { ... @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "codigoperfilusuario") public TblPerfilUsuario getTblperfilusuario() { return this.tblperfilusuario; } ...