【发布时间】:2015-02-15 20:08:52
【问题描述】:
我在 Hibernate 中遇到了关联问题。 我正在尝试在用户和客户之间建立关联。 到目前为止,我可以编写关联,但我不知道如何阅读。
为了保存关联,我正在使用这个:
这是为了在customer.java中保存用户
private Set user = new HashSet();
public Set getUser() {
return user;
}
public void setUser(Set user) {
this.user = user;
}
这个是在user.java中保存客户
private Set customer = new HashSet();
public Set getCustomer() {
return customer;
}
public void setCustomer(Set customer) {
this.customer = customer;
}
我正在创建客户和用户,并将它们连接在一起。 之后,我尝试获取所有关联的列表(用户应该有客户 ID 不是吗?)
Long usrId = (Long) mgr.createAndStoreUser("Jack", "Plack");
Long custId = (Long) mgr.createAndStoreCustomer("koko@koko.com");
mgr.addUserToCustomer(usrId, custId);
System.out.println("Added");
List users2 = mgr.listUsers();
for (int i = 0; i < users2.size(); i++) {
User user = (User) users2.get(i);
System.out.println(user.getUsername()+":"+user.getPassword()+" "+user.getCustomer());
}
这是我列出用户的方式:
private List listUsers() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List list = session.createQuery("from User").list();
session.beginTransaction().commit();
return list;
}
以下是我将用户添加到客户的方式:
public void addUserToCustomer(Long UserId, Long CustomerId) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
User anUser = (User) session.load(User.class, UserId);
Customer aCustomer = (Customer) session.load(Customer.class, CustomerId);
anUser.getCustomer().add(aCustomer);
session.getTransaction().commit();
}
不幸的是,当我尝试列出用户时,我得到了这个:
休眠:选择 user0_.USER_ID 作为 USER1_4_,user0_.username 作为 username4_, user0_.password as password4_ 来自 USERS user0_ 异常 在线程“主”org.hibernate.LazyInitializationException:未能 懒惰地初始化一个角色集合:airplane.User.customer,没有 会话或会话于 org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) 在 org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) 在 org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343) 在 org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86) 在 org.hibernate.collection.PersistentSet.toString(PersistentSet.java:309) 在 java.lang.String.valueOf(String.java:2981) 在 java.lang.StringBuilder.append(StringBuilder.java:131) 在 plane.Main.main(Main.java:46) Java 结果:1
我该如何解决这个问题?
提前致谢!
【问题讨论】:
标签: java hibernate jpa orm hibernate-mapping