Ich versuche, die Leistung eines Projekts, das JPA verwendet, zu verbessern.JPA. FetchType.Lazy verursacht seltsames Verhalten @ManyToOne
Ich verwende JPA 2.1 und Hibernate 5.0.1 Implementierung.
Ich änderte den FetchType einer ManyToOne-Beziehung zu Lazy, so dass das Ding in die Luft geht.
Wenn ich versuche, alle Datensätze des untergeordneten Objekts zu suchen: Der letzte Datensatz wird mit allen leeren Feldern und mit einem Handler = JavassistLazyInitializer geliefert. Und dieses seltsame Verhalten wirkt sich auf die Felder aus, die diese Objekte verwenden (wie h: OneSelectMenu).
Wenn ich die FetchType.Lazy die Sache wieder normal entfernen.
Einige Drucke:
-Code des zweiten Druck (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 ...
Hallo, können Sie bitte Ihren Stacktrace als Text innerhalb der Frage hinzufügen? Bilder können blockiert werden und sind mühsam zu lesen/kopieren von. – dubes
Ich frage mich, warum Sie nicht '' org.hibernate.LazyInitializationException'' gefeuert haben, können Sie die Ruhezustand und Persistenz Config – YouYou
@Dubes, Ok! Ich habe mich geändert, aber der erste Druck ist kein Code. – CodeinCodeout