我有一個列表(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? –