Hibernate “什么是”呢;“分离的”;grails中的实例?
什么是圣杯中分离的凹痕 请举例说明Hibernate “什么是”呢;“分离的”;grails中的实例?,hibernate,grails,Hibernate,Grails,什么是圣杯中分离的凹痕 请举例说明 提前感谢。这意味着它不再与Hibernate会话相关联。这意味着它不再与Hibernate会话相关联。当您创建新的域类实例时(例如def u=new User(用户名:“me”),Hibernate对此一无所知。但是当您持久化它时,例如,当您调用save()时,Hibernate将插入推送到数据库并将其与当前Hibernate会话关联(不要与HTTP会话混淆,它们完全不同) 此外,当您从数据库中单独加载实例或作为多个结果列表的一部分加载实例时,您可以访问该实例
提前感谢。这意味着它不再与Hibernate会话相关联。这意味着它不再与Hibernate会话相关联。当您创建新的域类实例时(例如
def u=new User(用户名:“me”)
,Hibernate对此一无所知。但是当您持久化它时,例如,当您调用save()
时,Hibernate将插入推送到数据库并将其与当前Hibernate会话关联(不要与HTTP会话混淆,它们完全不同)
此外,当您从数据库中单独加载实例或作为多个结果列表的一部分加载实例时,您可以访问该实例,但该实例也与当前会话关联。这些对象将“附加”到会话
这在几个方面很有用。一个是作为一级缓存。当您调用get
时,例如def user=user.get(123)
,它被检索并附加。但是如果您使用相同的id再次调用get
,它将从缓存中检索,不需要额外的数据库调用。另一个是脏检查。Hibernate还缓存检索到的原始数据,因此当您修改一个或多个字段时,它可以知道发生了什么(如果有)更改
对象断开连接的一个问题是延迟加载。通常在HTTP会话中存储对象,但一旦Hibernate会话关闭(例如,在请求结束时)所有已连接的对象都将分离。如果您有一个未初始化的延迟加载实例或集合,然后从HTTP会话检索该实例并尝试访问延迟数据,则会导致异常,因为该实例已断开连接,无法连接到数据库以检索延迟数据是将实例重新附加到当前会话-请参阅。更好的修复方法是不在会话中存储类似的对象,而是只存储id,并在需要时重新加载实例。当您创建新的域类实例时(例如
def u=new User(用户名:“me”)
,Hibernate对此一无所知。但是当您持久化它时,例如,当您调用save()
时,Hibernate将插入推送到数据库并将其与当前Hibernate会话关联(不要与HTTP会话混淆,它们完全不同)
此外,当您从数据库中单独加载实例或作为多个结果列表的一部分加载实例时,您可以访问该实例,但该实例也与当前会话关联。这些对象将“附加”到会话
这在几个方面很有用。一个是作为一级缓存。当您调用get
时,例如def user=user.get(123)
,它被检索并附加。但是如果您使用相同的id再次调用get
,它将从缓存中检索,不需要额外的数据库调用。另一个是脏检查。Hibernate还缓存检索到的原始数据,因此当您修改一个或多个字段时,它可以知道发生了什么(如果有)更改
对象断开连接的一个问题是延迟加载。通常在HTTP会话中存储对象,但一旦Hibernate会话关闭(例如,在请求结束时)所有已连接的对象都将分离。如果您有一个未初始化的延迟加载实例或集合,然后从HTTP会话检索该实例并尝试访问延迟数据,则会导致异常,因为该实例已断开连接,无法连接到数据库以检索延迟数据是将实例重新附加到当前会话-请参阅。更好的修复方法是不在会话中存储类似的对象,而是只存储id,并在需要时重新加载实例。持久类的新实例不与会话关联,在数据库中没有表示,也没有标识符值i被Hibernate认为是暂时的:
Person person = new Person();
person.setName("Foobar");
//人处于瞬态状态
持久性实例在数据库中有一个表示形式,一个标识符值,并与会话关联。通过将临时实例与会话关联,可以使其持久化:
Long id = (Long) session.save(person);
// person is now in a persistent state
现在,如果我们关闭Hibernate会话,持久实例将成为一个分离的实例:它不再连接到会话(但以后仍可以修改并重新连接到新会话)
所有这些都在整个第10章中得到了清楚的解释。我只是对上面的内容进行了解释。绝对是必读的。持久类的新实例与会话无关,在数据库中没有表示,Hibernate认为没有标识符值是暂时的:
Person person = new Person();
person.setName("Foobar");
//人处于瞬态状态
持久性实例在数据库中有一个表示形式,一个标识符值,并与会话关联。通过将临时实例与会话关联,可以使其持久化:
Long id = (Long) session.save(person);
// person is now in a persistent state
现在,如果我们关闭Hibernate会话,持久实例将成为一个分离的实例:它不再连接到会话(但以后仍可以修改并重新连接到新会话)
所有这些都在第10章中得到了清楚的解释。我只是在解释上面的内容。绝对是必读的