Hibernate中的load方法命中数据库

时间:2014-09-23 16:20:00

标签: java hibernate proxy

我理解Hibernate中的session.load()方法。

Employee emp = (Employee) session.load(Employee.class, new Long(1));

上面只返回代理,在emp对象上调用任何方法之前不会访问数据库。

我读到如果我呼叫标识符即emp.getId(),那么也不会进行数据库调用。但是当我跑步时,它确实调用了数据库,即使我在Employee类中有下面的内容。

@Id
private Long id; 

请让我知道我做错了什么。

1 个答案:

答案 0 :(得分:2)

为了使getId()不初始化代理,注释必须放在getter上,而不是放在字段上。

如果按照我的理解将它们放在字段上,Hibernate并不认为getter是访问实体持久状态的一种方式(因为它直接访问字段),但作为方法这可能只是返回相应的属性。因此在执行方法之前加载状态。