gpt4 book ai didi

hibernate - 如何在使用 Hibernate 映射的类中实现 toString()?

转载 作者:行者123 更新时间:2023-12-03 08:15:55 24 4
gpt4 key购买 nike

我有一个从 Hibernate session 中获得的类的实例。那个 session 早就过去了。现在,我调用 toString()我得到了预期的 LazyInitializationException: could not initialize proxy - no Session因为我正在尝试访问 Hibernate 在加载实例期间未解析的引用(延迟加载)。

我真的不想让加载变得急切,因为它会将查询从大约 120 个字符更改为超过 4KB(有 8 个连接)。而且我不必:我想在 toString() 中显示的所有内容是被引用对象的ID;即 Hibernate 在这个时间点需要知道的东西(或者它不能做延迟加载)。

所以我的问题是:你如何处理这个案子?切勿尝试在 toString() 中使用引用?或者您调用toString()在加载代码中以防万一?或者 Hibernate 中是否有一些实用函数,当我向它传递一个可能是惰性的引用时,它会返回一些有用的东西?还是避免在 toString() 中引用?共?

最佳答案

可以通过将 ID 字段的 accesstype 设置为“property”来做到这一点。像:

@Entity
public class Foo {
// the id field is set to be property accessed
@Id @GeneratedValue @AccessType("property")
private long id;
// other fields can use the field access type
@Column private String stuff;
public long getId() { return id; }
public void setId(long id) { this.id = id; }
String getStuff() { return stuff; }
// NOTE: we don't need a setStuff method
}

解释了 here .
这样,在创建代理时总是会填充 id 字段。

关于hibernate - 如何在使用 Hibernate 映射的类中实现 toString()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1722036/

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