为什么实体管理器 returns 我反对空值?

Why entity manager returns me object with null values?

我有spring控制器,它调用服务层,它调用Fao层。

1) 我使用 EntityManager 的 find() 方法获取用户对象。它检索数据非常好。

2) 每个用户与学校对象有一对多的关系。

@ManyToOne(fetch = FetchType.LAZY, optional=false)
    @JoinColumn(name="SCHOOL_ID", foreignKey = @ForeignKey(name = "FK_USER_SHCOOL"))
    private School school;

3) 当我从用户实体对象上学时,休眠记录我 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() 

它 returns School 对象,但它的所有值为空。

为什么值为空?我很困惑。在日志中,一切都很好。 Hibenate 也记录我正确的查询!此查询 returns 数据,但使用实体管理器值为空。我能做什么?

如果我把懒惰改成急切,一切都会好起来的!但我不喜欢那样 OF 如果我 merge() 存在学校实体,它会检索数据。我不明白为什么?

因为您定义了 FetchType.LAZY 获取学校列;看看 FetchType.LAZYFetchType.EAGERHERE 的区别。如果你想得到非空的学校对象,有两个选项:

  1. FetchType.LAZY更改为FetchType.EAGER
  2. 当您的用户对象在 @Transaction 注释方法中持久调用 user.getSchool() 时。