Java Hibernate是否为实体实例变量获取null?

Java Hibernate是否为实体实例变量获取null?,java,hibernate,Java,Hibernate,我正在尝试实现一项功能,该功能要求表单加载登录用户的数据。因此,我编写了一个查询,以获取此用户ID的数据,下面是school entity类的代码片段: public class ShSchool implements java.io.Serializable { private long schoolId; private GsDistrict gsDistrict; } 我尝试使用以下查询获取数据: session.createQuery("from ShSchool

我正在尝试实现一项功能,该功能要求表单加载登录用户的数据。因此,我编写了一个查询,以获取此用户ID的数据,下面是school entity类的代码片段:

public class ShSchool implements java.io.Serializable {
     private long schoolId;
     private GsDistrict gsDistrict;
}
我尝试使用以下查询获取数据:

session.createQuery("from ShSchool where schoolId="+schoolId).list();
问题是,我为基本实例变量获取了值,而为任何其他数据类型(如GsDistrict)获取了null,那么有什么不对,我如何获取这些对象的值呢

感谢

可能的原因:

  • 对于该特定用户,gsDistrict确实为空,请检查数据库以确保它不是空的
  • Hibernate映射不正确
  • gsDistrict是延迟加载的,您在Hibernate会话之外访问它。然而,在这种情况下,我希望抛出一个异常。
请包括Hibernate映射,可能存在问题。

可能的原因:

  • 对于该特定用户,gsDistrict确实为空,请检查数据库以确保它不是空的
  • Hibernate映射不正确
  • gsDistrict是延迟加载的,您在Hibernate会话之外访问它。然而,在这种情况下,我希望抛出一个异常。

请包括Hibernate映射,问题可能就在那里。

是的,我认为它是惰性加载我正在尝试访问它的值并获取null是的,我认为它是惰性加载我正在尝试访问它的值并获取null。谢谢octav,我认为我在Hibernate会话之外访问它。我认为如果我更改惰性加载,它可以得到解决,有什么可能的解决方案吗?嗯,从我所读到的内容来看,在Hibernate中,多对一关系的延迟加载是不容易实现的。另外,假设是延迟加载导致了这种情况,那么gsDistrict仍然不应该为null,它应该是一个代理。所以,既然您看到属性为null(如您所说),我认为这是另一个原因。请检查其他两个备选方案。。发布映射会有所帮助!:)避免延迟加载的一种可能性是NamedEntityGraphs。例如,请看这里,您可以定义哪些集合或列表通常是惰性的,但在特定情况下,可以通过使用存储库调用进行加载。感谢octav,我认为我是在hibernate会话之外访问它的。我认为如果我更改惰性加载,可以解决这个问题,有没有可能的解决方案?嗯,从我所读到的内容来看,多对一关系的延迟加载在Hibernate中是不容易实现的。另外,假设是延迟加载导致了这种情况,那么gsDistrict仍然不应该为null,它应该是一个代理。所以,既然您看到属性为null(如您所说),我认为这是另一个原因。请检查其他两个备选方案。。发布映射会有所帮助!:)避免延迟加载的一种可能性是NamedEntityGraphs。例如,请参见此处,您可以定义哪些集合或列表通常应该是惰性的,但在特定情况下应该使用存储库调用加载。