- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Spring 开发我的应用程序,使用 Hibernate 和 JPA 作为 MySQL 数据库中的持久性 API。当我从数据库中获取我的大部分对象时,它们的属性会使用数据库的值进行初始化,并且集合是延迟加载的。问题来自一个名为 Business
的实体。加载为 JavassistLaziInitializer
使用方法find()
来自 EntityManager
.
如果我执行 get 或 set 方法,他们会使用代理并给我所需的值,但是当我使用 @Valid
时和验证注释,因为实际值为 NULL(列值,而不是集合),我有验证错误,如 @NotNull
.
我希望有人知道一种方法来获取用 JavassistLazyInitializer 代理值填充的列,或者一种获取代理本身的方法。
请注意,正如我所关心的,这种行为不是 hibernate 中的错误,因为它已被多次报告为错误,但开发人员建议这是在某些条件下发生的 hibernate 的正常行为。
最佳答案
对于(如您所说)某些类型的代码,我使用“deproxy()”和其他几个辅助函数。
这使得 Spring 的“自动增长”路径绑定(bind)工作,在通过 Hibernate 加载可能的子类实体时检查实际类型以及代理导致事情中断的各种其他有趣的极端情况是必要的。
public class HbUtils {
public static <T> T deproxy (T obj) {
if (obj == null)
return obj;
if (obj instanceof HibernateProxy) {
// Unwrap Proxy;
// -- loading, if necessary.
HibernateProxy proxy = (HibernateProxy) obj;
LazyInitializer li = proxy.getHibernateLazyInitializer();
return (T) li.getImplementation();
}
return obj;
}
public static boolean isProxy (Object obj) {
if (obj instanceof HibernateProxy)
return true;
return false;
}
// ----------------------------------------------------------------------------------
public static boolean isEqual (Object o1, Object o2) {
if (o1 == o2)
return true;
if (o1 == null || o2 == null)
return false;
Object d1 = deproxy(o1);
Object d2 = deproxy(o2);
if (d1 == d2 || d1.equals(d2))
return true;
return false;
}
public static boolean notEqual (Object o1, Object o2) {
return ! isEqual( o1, o2);
}
// ----------------------------------------------------------------------------------
public static boolean isSame (Object o1, Object o2) {
if (o1 == o2)
return true;
if (o1 == null || o2 == null)
return false;
Object d1 = deproxy(o1);
Object d2 = deproxy(o2);
if (d1 == d2)
return true;
return false;
}
public static boolean notSame (Object o1, Object o2) {
return ! isSame( o1, o2);
}
// ----------------------------------------------------------------------------------
public static Class getClassWithoutInitializingProxy (Object obj) {
if (obj instanceof HibernateProxy) {
HibernateProxy proxy = (HibernateProxy) obj;
LazyInitializer li = proxy.getHibernateLazyInitializer();
return li.getPersistentClass();
}
// Not a Proxy.
return obj.getClass();
}
}
关于spring - hibernate JavassistLazyInitializer : problems with validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383742/
我正在使用 Spring 开发我的应用程序,使用 Hibernate 和 JPA 作为 MySQL 数据库中的持久性 API。当我从数据库中获取我的大部分对象时,它们的属性会使用数据库的值进行初始化,
当我使用 HibernateSession 类中的 load 方法时,出现以下异常,如下所示: getCurrentSession().load(entityClass, id);。 如果我使用以下内
这个问题已经有答案了: No serializer found for class org.hibernate.proxy.pojo.javassist.Javassist? (19 个回答) 已关闭
当我尝试获取一个用户详细信息时,我在 POSTMAN 客户端中收到以下错误。 Apache Tomcat/7.0.47 - Error report HTTP Status 500 - Could n
我是一名优秀的程序员,十分优秀!