我理解Hibernate中的session.load()
方法。
Employee emp = (Employee) session.load(Employee.class, new Long(1));
上面只返回代理,在emp
对象上调用任何方法之前不会访问数据库。
我读到如果我呼叫标识符即emp.getId()
,那么也不会进行数据库调用。但是当我跑步时,它确实调用了数据库,即使我在Employee类中有下面的内容。
@Id
private Long id;
请让我知道我做错了什么。
答案 0 :(得分:2)
为了使getId()
不初始化代理,注释必须放在getter上,而不是放在字段上。
如果按照我的理解将它们放在字段上,Hibernate并不认为getter是访问实体持久状态的一种方式(因为它直接访问字段),但作为方法这可能只是返回相应的属性。因此在执行方法之前加载状态。