gpt4 book ai didi

java - 如何加载实际的 Hibernate 实体关联而不是 LAZY 代理

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:27 26 4
gpt4 key购买 nike

我来自 eclipselink 并尝试通过 Hibernate 工作。

假设我们有一个类 Car 和一个类 WheelCar 类有 n 个轮子。两个实体都通过双向关联进行连接。更重要的是,在 Wheel 方面,我有一个 Car 引用:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "car_id")
private Car car;

加上 setter/getter 。

现在我想使用它的 id 获取一个轮子。来 self 的 EntityManager(不是 hibernate Session)。我像这样初始化 EntityManager:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = emf.createEntityManager();

下一步是像这样取一个轮子:

Wheel wheel = em.find(Wheel.class, 1);

轮子返回想要的类并且很好。现在我想知道哪辆车是车轮的父级:

Car car = wheel.getCar();

有了eclipselink,实际的车就已经装好了。使用 hibernate 代替加载代理类。

到目前为止,我唯一的解决方案是设置 FetchType.EAGER 或直接 fetch join 关系。我意识到Hibernate中的SQL语句仍然执行,但没有传递真正的对象。也是在

之后
Hibernate.initalize(car)

我无法检索汽车实体。

有没有办法在不形成查询或急切获取的情况下取回预期的对象?

最佳答案

您可能不需要担心代理。代理应以与普通对象相同的方式返回所有属性。

如果代理对象不工作(它返回空值),可能是您的某些字段或 setter 或 getter 设置为 final。先检查一下。

关于java - 如何加载实际的 Hibernate 实体关联而不是 LAZY 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28495817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com