Je veux choisir quand chargement du jeu avec LazyJPA + Hibernate OGM + Lazy Initialisation avec Jackson Datatype Mise en veille prolongée
Ceci est mon entité produit
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Type(type = "objectid")
private String id;
private String name;
@ManyToMany(fetch = FetchType.LAZY)
private Set<Category> categories;
Ceci est mon AbstractService
public abstract class AbstractService<T> {
private Class<T> entityClass;
public AbstractService(Class<T> entityClass){
this.entityClass=entityClass;
public List<T> findAll(){
Query nativeQuery = getEntityManager().createNativeQuery("{}", entityClass);
return getEntityManager().createNativeQuery("{}",entityClass).getResultList();
}
}
ceci i mon ProductService
@Stateless
public class ProductService extends AbstractService<Product> {
@PersistenceContext(unitName = "name-db")
private EntityManager em;
public ProductService() {
super(Product.class);
}
@Override
protected EntityManager getEntityManager() {
return em;
}
ceci est ma méthode d'essai
@Test
public void testFindAllProducts()throws Exception {
List<Product> products = productService.findAll();
for (Product p:
products) {
//Hibernate.initialize(p.getCategories());
System.out.println(p.toString());
}
}
Je voudrais utiliser un proxy pour initialiser les catégories chaque fois que je besoin
Mise en veille prolongée (y compris Hibernate OGM) prend en charge le chargement à l'aide de proxy objets au lieu de instances des classes d'entités. Hibernate utilise des proxies comme solution pour «séparer» les données interconnectées reçues d'une base de données en de plus petites pièces qui peuvent être facilement stockées en mémoire. Il peut être utile d'être conscient que Hibernate génère dynamiquement des proxies pour les objets qui sont chargés paresseusement. Les chances sont, vous n'êtes pas au courant des objets proxy, et ne sera pas jusqu'à ce que vous obtenez certaines exceptions de type LazyInitializationException, ou jusqu'à ce que vous essayiez de tester le chargement paresseux dans un débogueur et notez la présence de certains objets non-null avec propriétés nulles. Ne sachant pas quand vous êtes « travailler » sur un objet proxy au lieu d'un objet d'une entité peut entraîner des résultats étranges ou exceptions
Comment puis-je mettre en œuvre une procuration?
En fait, mais lorsque je tente de l'obtenir j'accéder _Caused par: org.hibernate .LazyInitializationException: impossible d'initialiser paresseusement une collection de rôle_ – Pako
Vous devez vérifier que tout se passe dans une transaction en cours d'exécution. Hibernate OGM nécessite toujours une démarcation des transactions, même avec MongoDB. – Davide