惰性加载无法在休眠模式下一对多工作

问题描述 投票:0回答:1

延迟加载不适用于休眠查询语言。表名=人,宠物

此查询的结果还包含宠物

Query query = session.createQuery("from human");
List<human> humans = query.list();

PET实体

    @Entity

    public class pet implements Serializable
    {
        @Id
        @ManyToOne(targetEntity = human.class)
        @JoinColumn(name="id")
        public long id;


        public String name;
    }

人类实体

    public class human implements Serializable
    {        
        @Id
        @Column(name="id")
        private int id;

        @Column(name="name", length=20, nullable=true)
        private String name;

        @OneToMany(fetch = FetchType.LAZY)
        @JoinColumn(name="id")
        public List<pet> pets = new ArrayList<>();

        public human(int id, String name)
        {
            this.name = name;
            this.id = id;
        }

        public human()
        {
        }
    }

使用版本5.4.10请帮助我。在此先感谢!

java hibernate jpa one-to-many
1个回答
0
投票

感谢您的评论朋友。

我清除了疑虑。我错了,懒惰获取正在工作。

最初,仅执行此查询select human0_.id as id1_0_, human0_.name as name2_0_ from human human0_

但是我是怎么得到宠物清单和人类的物体的。

我在List<human> humans = query.list();行之后使用了调试器但是在会话中。

因此,宠物列表实际上是关于一个代理对象的,它是由休眠在运行时创建的。默认情况下为空。

[每当我们在调试器中打开人类对象时,都会有一个新查询命中数据库,以获取宠物列表。那是代理对象初始化的时候。这是我感到困惑的地方,以为宠物也和人类一起被拿来。

参考:

  1. 此问题的第一个答案。hibernate-hangs-or-throws-lazy-initialization-no-session-or-session-was-closed

  2. 再次访问Java中的blog

© www.soinside.com 2019 - 2024. All rights reserved.