【问题标题】:How to load a Hibernate association along with the parent entity如何与父实体一起加载 Hibernate 关联
【发布时间】: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


    【解决方案1】:

    您需要在加载User 实体时获取Customer

    List list = session.createQuery("select u from User u left join fetch u.customer").list();
    

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      相关资源
      最近更新 更多