【发布时间】:2015-04-22 05:07:29
【问题描述】:
我有spring控制器,它调用服务层,它调用Fao层。
1) 我使用 EntityManager-s find() 方法获取用户对象。它很好地检索数据。
2) 每个用户与 School Object 有一对多的关系。
@ManyToOne(fetch = FetchType.LAZY, optional=false)
@JoinColumn(name="SCHOOL_ID", foreignKey = @ForeignKey(name = "FK_USER_SHCOOL"))
private School school;
3) 当我从用户实体对象上学时,hibernate 会记录我的 SQL 查询。
select school0_.id as id1_7_0_, school0_.ADDRESS as ADDRESS2_7_0_, school0_.CITY as CITY3_7_0_,
school0_.DESCRIPTION as DESCRIPT4_7_0_, school0_.EMAIL as EMAIL5_7_0_, school0_.NAME as NAME6_7_0_,
school0_.version as version7_7_0_ from SCHOOL school0_ where school0_.id=2
当我在 SQL 客户端中运行此查询时,我得到了真实且正确的数据!
4) 但是当我从用户实体上学时:
School s=user.getSchool()
它返回 School 对象,但它的所有值都为 null。
为什么值是空的?我糊涂了。在日志中,一切都很好。 Hibenate 也记录了我正确的查询!此查询返回数据,但使用实体管理器的值为空。我能做什么?
如果我将 LAZY 更改为 EAGER,一切正常!但我不喜欢那样 OF 如果我 merge() 存在学校实体,它会检索数据。我不明白为什么?
【问题讨论】:
标签: hibernate jpa jpa-2.0 hibernate-4.x