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

标签 hibernate lazy-loading tostring

我有一个从 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/

相关文章:

java - Envers 审计表中缺少属性

java - 在 Spring : Caused by: org. hibernate.AnnotationException 中使用 Hibernate 的困难:针对未映射的类使用 @OneToMany 或 @ManyToMany:

asp.net-mvc - DTO 模式 + 延迟加载 + Entity Framework + ASP.Net MVC + 自动映射器

javascript - 在 AngularJs 中动态添加 url 到脚本标签中

java - 在 println 中调用 println 方法

java - spring 中的 sessionFactory 配置与 hibernate 版本 4+

java - Jackson hibernate 模块 - 渴望特定请求

c# - Entity Framework AsNoTracking() 无限导航属性

c# - 空字符串上的 ToString

couchbase - 将 Couchbase DB 的 n1ql 查询输出中的数字转换为字符串