在Hibernate中,load方法会访问数据库。
在Hibernate中,当我们调用getId()
方法时,如果注解被放在字段上而不是放在getter方法上,就会导致代理对象被初始化。Hibernate直接访问字段,而不把getter方法视为访问实体的持久状态的方式。因此,在执行方法之前,状态会被加载。
这个问题的解决方法是,将注解放在getter方法上,而不是字段上。这样Hibernate会将getter方法视为访问实体持久状态的方式,而不会直接访问字段。这样就避免了代理对象的初始化。
下面是修改后的代码示例:
@Entity @Table(name = "my_entity") public class MyEntity { private Long id; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; } public void setId(Long id) { this.id = id; } // other fields and methods }
通过将注解放在getter方法上,我们成功避免了代理对象的初始化,从而解决了这个问题。