我想选择时加载设置与懒惰JPA + Hibernate的OGM +延迟初始化与杰克逊的数据类型的Hibernate
这是我的实体产品
@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;
这是我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();
}
}
This i我的产品服务
@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;
}
这是我的测试方法
@Test
public void testFindAllProducts()throws Exception {
List<Product> products = productService.findAll();
for (Product p:
products) {
//Hibernate.initialize(p.getCategories());
System.out.println(p.toString());
}
}
我想用一个代理每次我需要时间它
休眠(包括Hibernate OGM)支持懒加载使用代理对象,而不是初始化类 实体类的实例。 Hibernate使用代理作为解决方案,将从数据库接收到的互连数据“分解”为可轻松存储在内存中的小块。了解Hibernate动态生成 代理的延迟加载对象可能会很有用。机会是,你不知道代理对象,并且直到你得到 类型LazyInitializationException的一些异常,或者直到你试图在调试器中测试延迟加载并且注意到一些非空对象的存在null属性。不知道,当你代理对象 而不是一个实体对象的“工作”可能会导致奇怪的结果或异常
我怎样才能实现代理?
事实上,但当我尝试访问我得到它的_Caused:org.hibernate作为.LazyInitializationException:未能延迟初始化角色集合__ – Pako
您应该检查是否发生在正在运行的事务中。即使在MongoDB中,Hibernate OGM仍然需要事务划分。 – Davide