hibernate - 从实体 pojo 中删除 Hibernate?

标签 hibernate serialization pojo

我一直在尝试从实体 pojo 中删除 Hibernate 特定的细节(例如,当我需要序列化它们并发送到远程机器时),以下是我想出的代码。它的“initializeAndUnproxy()”取自 Bozho 给出的答案之一:Converting Hibernate proxy to real object我修改了它以在其中调用递归方法。

我希望您对这段代码的缺点发表评论。例如。它不会从中删除“PersistentSet”类型的类型。那么你有什么改进建议?

static <T> T initializeAndUnproxy(T entity) throws IllegalArgumentException, IllegalAccessException
{
    if(entity == null)
    {         
        throw new NullPointerException("Entity passed for initialization is null");     
    } 

    Hibernate.initialize(entity);       
    T ret = entity;

    if(entity instanceof HibernateProxy)
    {           
        ret = (T)((HibernateProxy)entity).getHibernateLazyInitializer().getImplementation();
        initializeRecursively(ret);         
    }

    return ret;
}

static void initializeRecursively(Object entity) throws IllegalArgumentException, IllegalAccessException
{
    Class<?> clazz = entity.getClass();
    Field[] fields = clazz.getDeclaredFields();

    for(Field field : fields)
    {
        field.setAccessible(true);          
        Object obj = field.get(entity);                     
        Hibernate.initialize(obj);

        if(obj instanceof HibernateProxy)
        {                               
            obj = ((HibernateProxy)obj).getHibernateLazyInitializer().getImplementation();
            field.set(entity, obj);     
            initializeRecursively(obj);
        }           
        if(obj instanceof LazyInitializer)
        {                       
            obj = ((LazyInitializer)obj).getImplementation();   
            initializeRecursively(obj);
        }                       
    }
}

最佳答案

对象克隆可能吗?克隆您想要序列化并通过网络发送的每个对象。您确实必须编写一个克隆方法,尽管您不会为每个 POJO 增加一个 DTO 类

关于hibernate - 从实体 pojo 中删除 Hibernate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8530850/

相关文章:

c# - 如何序列化我的类(class)以通过 retrofit 将其作为 urlencoded 发送

java - Hibernate二级缓存理解

java - 如何与JPA查询这种一对一的关系

java - 检查帐户是否已存在时出现空指针异常 - Spring+Thymeleaf

java - 将对象值列表转换为 POJO

android - 如何使用Retrofit2解析错误响应?

java - Jackson HashMap,写入字符串时忽略映射名称

java - org.hibernate.exception.SQLGrammarException : could not prepare statement

java - 序列化问题: org. springframework.dao.support.PersistenceExceptionTranslationInterceptor

C# 序列化包含更多列表的对象列表