我有一个列表(List<Employee>)
与名称employees
由hibernate (session.createQuery().list())
返回为我的域employee
。此列表的员工元素具有外部关键元素的代理,如department
,由employee.getDepartment()
获取。对象序列化初始化休眠代理
但是当我做:
{
FileOutputStream fout = new FileOutputStream("d:\\addresss.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(employees);
oos.close();
fout.close();
ObjectInputStream ois= new ObjectInputStream(new FileInputStream("d:\\addresss.ser"));
List<Employee> retrived=(List<Employee>)ois.readObject();
ois.close();
}
名单,我得到那么IE retrived
拥有员工元素完全初始化,但实际列表employees
没有完全初始化的元素。
问题,我需要了解在序列化或脱分阶段可能发生的情况,即retrieved
列表已初始化元素,而实际列表employee
没有。
我不是100%确定如果上面的序列化没有调用getter/setter方法,所以没有办法代理被初始化。
注意我没有打电话给员工getter来检查它是代理还是初始化,因为我知道调用getter会初始化代理。我只是检查使用eclise调试检查变量。
此外,还有一件事我在日志中看到的(当部门被初始化):
System.out.println("class:"+((Employee)employees.get(0)).getDepartment().getClass().getSimpleName());
//prints: "Department_$$_jvstfcc_41"
System.out.println("class:"+((Employee)retrived.get(0)).getDepartment().getClass().getSimpleName());
//prints: "Department"
一些信息: employee.hbm.xml
包含:
<many-to-one
name="department"
column="department_id"
>
Hibernate的版本:4.3.4.Final
任何帮助将不胜感激。提前致谢。
请注意,像_ Department _ $$ _ jvstfcc_41这样的返回名称的object.getClass()仍然处于初始化状态。更多信息检查:object.getHandler()。isUninitialized –
你使用哪个hibernate版本?你能发布你的映射吗?我用Hibernate 4.3.10和@ManyToOne做了一个小测试,并且序列化之前和之后的类名相同。 – ike3
只是。你的班级名称就像Class或Class _ $$ _ blabla? –