hibernate返回一个不为null的对象,但它本身却非常懒惰:javassistlazyinitializer

vi4fp9gy  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(324)

问题并不总是可再现的,而是在使用criteriabuilder从数据库获取对象时。
代码:

@Entity
@Table(name = MyEntityObject.TABLE_NAME)
@Access(AccessType.FIELD)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@BatchSize(size = 50)
public class MyEntityObject extends AbstractCodeEntity implements Comparable<MyEntityObject> {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<MyEntityObject> criteriaQuery = builder.createQuery(MyEntityObject.class);

Root<MyEntityObject> root = criteriaQuery.from(MyEntityObject.class);

Predicate condition = builder.equal(root.get(MyEntityObject.code), code);
boolean distinct = FetchBuilder.buildFetchs(root, fetchsOperations);
criteriaQuery.distinct(distinct).where(condition);

TypedQuery<MyEntityObject> query = entityManager.createQuery(criteriaQuery);

return query.getSingleResult();

当然,myentityobject的属性为lazy,其他属性为earge
调试时,返回的对象包含一个处理程序={javassistlazyinitializer@19574}+对象属性为空。
我试着找出hibernate是否在数据库中查找它=>他找到了
如果对象存在于第一个cach=>上,则它不存在
有人有主意吗?

ergxz8rk

ergxz8rk1#

我这边的两个注意事项-不确定这是否完全涵盖了您的问题:
checkout 找不到类org.hibernate.proxy.pojo.javassist.javassist的序列化程序?如果某些解决方案可以应用到您的案例中
序列化实体的目的是什么?也许您可以找到一种方法将相关值复制到另一个对象中,而不序列化实体

相关问题