我知道所有这些术语,如新的,瞬态的,分离的等等。但是,有时我会遇到像 -
这样的问题调用hibernate session.get方法时实际发生了什么? - hibernate会用空构造函数创建实例吗? - 会调用setter吗?
请你对此有所了解。
答案 0 :(得分:0)
调用hibernate session.get方法时实际发生了什么? - hibernate会用空构造函数创建实例吗? - 会调用setter吗?
YES。 Hibernate将在获取数据后调用no-argument constructor
来创建bean。它将调用setter方法来设置相应的值。这就是为什么当缺少任何getter / setter时hibernate会出错的原因。
如评论中所述,您可以设置调试点并查看此情况。
答案 1 :(得分:0)
调用hibernate session.get方法时实际发生的情况 调用? - hibernate将使用空构造函数创建实例 ?? - 会调用setter吗?
这取决于当前会话是否已经管理了具有相同PK的实例,以及映射实体的属性是否配置为按属性访问或按字段访问。
如果当前会话已经管理了具有相同PK的实例,则将返回该实例。在这种情况下,不会创建新实例。
否则,首先通过调用空构造函数创建一个新实例。然后将为那些配置为属性访问的属性调用setter。对于那些配置为按字段访问的属性,不会调用它们的setter,因为hibernate将直接将值注入这些字段。
有关字段访问权限和属性访问权限的详细信息,请参阅this。