hibernate getId正在加载对象,即使它是惰性的

hibernate getId正在加载对象,即使它是惰性的,hibernate,Hibernate,我记得JPA或hibernate中有一个注释,告诉hibernate使用getId/setId方法而不是属性(我们注释我们的属性)。如果没有这个设置,getId会命中数据库并填充该对象的所有字段,这不是我想要的。有人知道那个注释是什么吗 例如: public void Project { @Id //Other annotation forcing hibernate to use property get/settter public Long id; } public Tick

我记得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;
}
因此,ticket.getProject.getId()会导致在id已经在hibernate项目代理对象中时点击数据库以获取项目。注释将修复我记忆中的问题

谢谢,
Dean

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

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

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

请在此处链接更多详细信息;对不起,我一直在使用playframework,过了一段时间你就习惯了。我自己也不喜欢公共字段,但在使用scala之后,我希望java能有类似的东西来减少编码。shot,这会为它所使用的每个类生成一个警告,因为JPA规范说注释必须在getId方法上进行,但将其移到那里只会导致异常,根本不起作用。这些天你是怎么做到的???(我以前在现场使用过这个,但可能是hibernate特有的)…谢谢。lazy field access内容的新URL: