【问题标题】:hibernate getId is loading the object even though it is lazyhibernate getId 正在加载对象,即使它是惰性的
【发布时间】:2012-03-04 06:11:59
【问题描述】:

我记得在 JPA 或 hibernate 中有一个注释告诉 hibernate 使用 getId/setId 方法而不是属性(我们注释我们的属性)。如果没有此设置,getId 会导致访问数据库并填写该对象的所有字段,这不是我想要的。有人知道那个注解是什么吗?

例子:

public void Project {
  @Id
  //Other annotation forcing hibernate to use property get/settter
  public Long id;
}

public Ticket {
  @ManyToOne(lazy=true)
  public Project project;
}

所以,当 id 已经在休眠项目代理对象中时,ticket.getProject.getId() 会导致访问数据库以获取项目。注释将修复我记得的问题。

谢谢, 院长

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    您需要告诉 Hibernate 使用属性访问而不是字段访问来访问 ID:

    @Id
    @Access(AccessType.PROPERTY)
    private Long id;
    

    你真的不应该公开你的字段。

    【讨论】:

    • 链接这里有更多细节; 256.com/gray/docs/misc/…
    • 抱歉,一直在使用 playframework,一段时间后你就习惯了。我自己不喜欢公共字段,但是在使用 scala 之后,我希望 java 有类似的东西来减少编码。
    • 拍摄,这会为它所在的每个类生成一个警告,因为 JPA 规范说注释必须在 getId 方法上进行,但将它移到那里只会导致异常并且根本不起作用。这些天如何正确地做到这一点??? (我曾经在现场使用它,但它可能是特定于休眠的)...谢谢。
    • 惰性字段访问的新 URL:256stuff.com/gray/docs/misc/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2017-07-26
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多