我开始学习使用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:无法初始化代理 - 没有会话
任何帮助将不胜感激。谢谢
答案 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;
}
...