Hibernate是一个持久性框架,用于保存数据 从Java环境到数据库。
我很困惑,如果我们坚持并反对数据库,那么为什么Hibernate架构会在Application和Hibernate中间指示持久对象?
答案 0 :(得分:32)
我会让它更清晰。持久对象是您创建的POJO类的实例,它们表示数据库中表中的行。 根据{{3}},表示数据库中的表的POJO类的实例经历了3个状态,其中持久性是其中之一。
当POJO实例处于会话范围内时,它被认为是持久的,即当我们关闭或刷新会话时,hibernate会检测对该对象所做的任何更改并将其与数据库同步。
关于hibernate.properties和XML Mapping @Ken Chan是对的。有关休眠对象的更多插图,请浏览hibernate-doc。
答案 1 :(得分:19)
首先,您需要了解Hibernate对象的三种状态,即Transient,Persistent,Detached。
瞬态:如果对象刚刚使用new运算符进行实例化,并且数据库中没有对象的引用,则它处于临时状态,即它不代表数据库中的任何行。
持久状态:如果对象在数据库中有一些引用,则它处于持久状态,即它表示数据库中的某一行,并为其分配标识符值。如果对该对象进行了任何更改,那么hibernate将检测这些更改,并且数据库中将存在效果,这就是名称Persistent的原因。会话结束时会进行这些更改。持久对象在会话范围内。
分离状态:一个持久且不再在会话范围内的对象。 hibernate不会检测对此对象所做的任何更改。它可以再次连接到会话以使其再次持久化。
答案 2 :(得分:8)
根据该图,您可以配置hibernate.properties
或某些XML mapping
以将数据库表映射到名为persistent object
的java对象。
然后在application
中,使用persistent object
作为普通的java对象
操纵它的状态。您可以将persistent object
传递给hibernate。然后,Hibernate将生成并向DB发出必要的SQL,以同步persistent object
及其相应数据库记录的状态。这有意义吗?
答案 3 :(得分:6)
持久对象通常是存储在内存中的对象,甚至超过了创建它的进程的持续时间。 然后将这些对象存储在数据库中。
答案 4 :(得分:4)
持久对象只不过是POJO类的一个实例。而POJO类只不过是一个代表表的类。并且Hibernate总是监视那个持久对象。无论何时操作该对象或者在该对象中进行了任何更改,Hibernate都会在该表中执行相同的操作(该表由POJO类表示)。这一切都由hibernate处理。所以在排序中这是hibernate框架的一个特性。
答案 5 :(得分:1)
持久对象是程序中在数据库中具有表示的类。
示例如果您的Car类具有NumberPlate,Fuel属性。 NHibernate配置会将此映射到例如数据库中名为Car的表中,并且这些列对应于Car类属性。