延迟加载不适用于休眠查询语言。表名=人,宠物
此查询的结果还包含宠物
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请帮助我。在此先感谢!
感谢您的评论朋友。
我清除了疑虑。我错了,懒惰获取正在工作。
最初,仅执行此查询select human0_.id as id1_0_, human0_.name as name2_0_ from human human0_
。
但是我是怎么得到宠物清单和人类的物体的。
我在List<human> humans = query.list();
行之后使用了调试器但是在会话中。
因此,宠物列表实际上是关于一个代理对象的,它是由休眠在运行时创建的。默认情况下为空。
[每当我们在调试器中打开人类对象时,都会有一个新查询命中数据库,以获取宠物列表。那是代理对象初始化的时候。这是我感到困惑的地方,以为宠物也和人类一起被拿来。
参考: