我想了解一个现有的应用程序使用休眠,我有一些知识。在这个应用程序中,已经创建了一个数据库模式,并且类已经从数据库模式中自动生成。了解/设置休眠配置
让我们在DB 2代表的例子:
PERSON(id, firstname, surname)
OBJECT(id, owner_id, description)
在表OBJECT
,owner_id
将是一个外键PERSON.id
。
生成的类看起来大致这样:
class Person {
// ok for the following
int id; // with getters and setters
String firstname; // with getters and setters
String surname; // with getters and setters
// dunno why the following ?
Set objects = new HashSet(0);
Set getObjects() { return this.objects; }
void setObjects(Set objects) this.objects = objects; }
}
class Object {
int id; // with getters and setters
Person owner; // with getters and setters
String description; // with getters and setters
}
首先,我不知道为什么会出现在集生成的Person
类拥有的对象的引用。第二,如果通过HQL查询得到Object
或List<Object>
,则此Object
的Person
成员是否完全加载?我应该如何设置hibernate以确保它是?
我在问,因为在我的应用程序中,我将hibernate会话作为单独的可执行文件运行,另一个与hibernate应用程序通信的递归应用程序,并要求它发送一些持久对象。我可以得到一个Object
,但如果这个对象上我做object.getPerson().getFirstname()
,我碰上一个org.hibernate.LazyInitializationException: could not initialize proxy - no Session
'Set'用于双向参考。一个'Object'通过所有者引用知道它的所有者,一个'Person'通过'Set'知道它的所有'Object's。 – 2013-03-13 13:42:02