我想获取一对一关系的ID,而不加载整个对象。我以为可以使用如下所示的延迟加载来做到这一点:
class Foo {
@OneToOne(fetch = FetchType.LAZY, optional = false)
private Bar bar;
}
Foo f = session.get(Foo.class, fooId); // Hibernate fetches Foo
f.getBar(); // Hibernate fetches full Bar object
f.getBar().getId(); // No further fetch, returns id
我希望f.getBar() 不 触发另一个提取。我希望hibernate给我一个代理对象,该代理对象使我可以调用.getId()而不实际获取Bar对象。
我究竟做错了什么?
使用 财产访问策略
代替
@OneToOne(fetch=FetchType.LAZY, optional=false)
private Bar bar;
采用
private Bar bar;
@OneToOne(fetch=FetchType.LAZY, optional=false)
public Bar getBar() {
return this.bar;
}
现在工作正常!
如果调用 不是标识符getter方法的 任何方法 , 则会初始化代理。但是它仅在使用属性访问策略时有效。记在心上。
请参阅:Hibernate
5.2用户指南
我在spring boot API工作。这是我第一次遇到这个问题。 谢谢你的回答:)
我有非常复杂的冬眠结构,有许多@manytomy、@ManyToOne、@OneToOne等关联。这些嵌套的集合/对象也有自己的嵌套对象/集合。整个对象被延迟加载。 我试图实现的是,对于一个特定的操作,能够急切地获取整个对象。 我做了一些研究,但我所能找到的只是需要指定每个对象/集合并手动获取的解决方案。 有没有一种方法可以获取整个对象结构,而无需指定需要获取的每个对象?
问题内容: 考虑: 我该怎么做: 显然,这不起作用,因为第一个索引名为,而不是。 可以,但是我不知道它的名字叫foo。它可以命名为任何东西。我只想要第一个。 问题答案: 如果对象的顺序很重要,则应修改JSON模式以将对象存储在数组中: 或许: 正如Ben Alpert指出的那样,Javascript对象的属性是无序的,并且如果希望它们按与对象常量中指定的顺序相同的顺序枚举,则代码将被破坏-没有“f
我有三个表/实体: > 游戏 网站游戏 地点 我必须在教义2中写查询,这将使所有游戏(作为对象)可用于特定的网站(得到这个特定的网站作为对象)。唯一的关系(多对一)在表/实体SiteGame中,它包含列/对象: 游戏/游戏id 站点/站点id 通常,原始SQL看起来像(并且可以工作): 这是我在教义中尝试过的,但失败了: 错误:路径表达式无效。必须是StateFieldPathExpression
2021-03-10 20:24:23.268调试118757--[main]org.hibernate.sql:更新学生集name=?,team=?,year=?其中UNIQUE_NUMBER=? 我原以为只会发出一个“更新年份”声明,但令我惊讶的是,看起来所有的事情都像一对经典的findOne()/save()操作一样完成了。我错了吗?
问题内容: 我有一对多关系中的两个类和一个有点奇怪的HQL查询。即使我已经阅读了一些已经发布的问题,对我来说也不清楚。 当我使用以下查询时,我得到重复的Department对象: 因此,我必须使用不同的: 这是一种预期的行为吗?我认为这与SQL比较是不寻常的。 问题答案: 这个问题在Hibernate FAQ中有详尽的解释: 首先,您需要了解SQL以及OUTER JOIN在SQL中的工作方式。如果