Classes de Modelo
No post te hoje iremos utilizar duas classe de modelo, Person e Dog:
package com.model;
import javax.persistence.*;
@Entity
public class Dog {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
public Dog() {
}
public Dog(String name) {
this.name = name;
}
//get and set
}
package com.model;
import java.util.*;
import javax.persistence.*;
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
@OneToMany
@JoinTable(name = "person_has_lazy_dogs")
private List<Dog> lazyDogs;
public Person() {
}
public Person(String name) {
this.name = name;
}
// get and set
}
Veja que com essas duas classes já é possível simular o erro LazyInitializationException. Temos a classe Person que tem uma lista de Dog.
Teremos também uma classe de persistência de dados (EJB) e um ManagedBean para nos ajudar a simular e mostrar o tratamento do erro:
package com.ejb;
import java.util.List;
import javax.ejb.*;
import javax.persistence.*;
import com.model.*;
@Stateless
public class SystemDAO {
@PersistenceContext(unitName = "LazyPU")
private EntityManager entityManager;
private void saveDogs(List<Dog> dogs) {
for (Dog dog : dogs) {
entityManager.persist(dog);
}
}
public void savePerson(Person person) {
saveDogs(person.getLazyDogs());
saveDogs(person.getEagerDogs());
entityManager.persist(person);
}
// you could use the entityManager.find() method also
public Person findByName(String name) {
Query query = entityManager.createQuery("select p from Person p where name = :name");
query.setParameter("name", name);
Person result = null;
try {
result = (Person) query.getSingleResult();
} catch (NoResultException e) {
// no result found
}
return result;
}
}
package com.mb;
import javax.ejb.EJB;
import javax.faces.bean.*;
import com.ejb.SystemDAO;
import com.model.*;
@ManagedBean
@RequestScoped
public class DataMB {
@EJB
private SystemDAO systemDAO;
private Person person;
public Person getPerson() {
return systemDAO.findByName("Mark M.");
}
}


Salvou meu dia!
Parabéns pelo artigo!
Eu quer agradeço o apoio! =D