【发布时间】:2016-10-29 13:01:26
【问题描述】:
我正在尝试提高使用 JPA 的项目的性能。
我正在使用 JPA 2.1 和 Hibernate 5.0.1 实现。
我将 ManyToOne 关系的 FetchType 更改为 Lazy,所以事情搞砸了。
当我尝试查找子对象的所有记录时:最后一条记录带有所有空字段和 handler=JavassistLazyInitializer。这种奇怪的行为会影响使用此对象的字段(如 h:OneSelectMenu)。
如果我删除 FetchType.Lazy,事情就会恢复正常。
一些印刷品:
第二次打印代码(FetchType.Lazy):
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id_Usuario")
private Integer idUsuario;
// Fields ...
@JoinColumn(name = "Id_Tipo_Logradouro", referencedColumnName = "Id_Tipo_Logradouro", nullable = true)
@ManyToOne(optional = true, fetch = FetchType.LAZY)
private TipoLogradouro tipoLogradouro;
@JoinColumn(name = "Id_Tipo_Usuario", referencedColumnName = "Id_Tipo_Usuario")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private TipoUsuario tipoUsuario;
@JoinColumn(name = "Id_Supervisor", referencedColumnName = "Id_Usuario")
@ManyToOne(optional = true, fetch = FetchType.LAZY)
private Usuario supervisor;
// Contructor, Getters Setters etc ...
}
public class TipoUsuario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 1)
@Column(name = "Id_Tipo_Usuario")
private String idTipoUsuario;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 20)
@Column(name = "Descricao")
private String descricao;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 1)
@Column(name = "Possui_Supervisor")
private String possuiSupervisor;
@Size(max = 1)
@Column(name = "Possui_Meta")
private String possuiMeta;
@Size(max = 1)
@Column(name = "Recebe_Alerta")
private String recebeAlerta;
@Transient
private List<Usuario> usuarioList = new ArrayList<>();
//Contructor, Getters Setters etc ...
【问题讨论】:
-
嗨,您可以将您的堆栈跟踪作为文本添加到问题中吗?图像可能会被阻止并且读取/复制很麻烦。
-
我想知道你为什么没有
org.hibernate.LazyInitializationException被解雇,你能发布休眠和持久性配置 -
@Dubes,好的!我改了,但第一次打印的不是代码。
标签: hibernate jpa many-to-one jpa-2.1