java为啥需要持久化?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java为啥需要持久化?相关的知识,希望对你有一定的参考价值。

持久化是将Java虚拟机对象持久保存,而不是将数据库映射为对象,通常数据的存储是用数据库实现的;当然,如果你有更好的存储系统,也可以映射到系统中的存储设备中,这可能需要你自行开发持久化框架来进行持久化一个Java对象。如果是持久化到数据库,现在已经涌出许多ORM框架,像Hibernate,轻量级的ibatis,都是不错的选择。
现在大部分数据库还是关系型的,而Java是面向对象的语言,很明显将一个对象型的数据如何保存到关系型数据库中呢?这就要借助强大的ORM框架解决这个问题。
比如ibatis框架,使用时只要配置好sqlMapConfig及相应的sqlMap配置文件,只要保存对象或更新对象及可,编程时不再需要写sql才能操作数据,查找时同样查到的是对象数据而不是关系型数据,通过对象set(para),get()方法插入及取得对应数据,Hibernate也是同样的,这里不再祥述,现在网上资料及相关书籍中有很多这样的讲解,了解、熟悉甚至精通这些需要研读相关书籍,有兴趣的话最好研读源码,以上都是开源的框架,网上即可下到
参考技术A Java只是一种编程语言,它能做N多事情。【Java是做事情的】
持久化是一种概念,意思是将数据持久化:比如存入数据库,写入到硬盘的文件中。可以永久(永久是相对的)保存。【持久化是Java能做的事情中的一种】
无论什么语言开发的cs(客户端<=>服务器)软件,bs(浏览器<=>服务器)软件,还是纯单机桌面软件,编程语言(包括Java)所能做的,只是操作数据,处理数据,与用户交互,如果不把这些数据保存到(持久化)某种介质(数据库,文件...),等关机再开机后,或者重新打开软件后,上次的数据就丢失了。
如果持久化数据后,重新打开软件,就可以读取以前持久化的数据,恢复软件的状态,继续之前的工作……
总而言之,并不是开发语言(如:Java)需要持久化,而是数据需要持久化,Java是将数据持久化的一种手段(你用什么语言开发,就用什么语言将数据持久化)。

为啥核心数据不会持久化到磁盘?

【中文标题】为啥核心数据不会持久化到磁盘?【英文标题】:Why would core data not persist to disk?为什么核心数据不会持久化到磁盘? 【发布时间】:2015-01-05 12:00:03 【问题描述】:

我有一个应用程序,它使用核心数据并在数据更改时定期成功写入磁盘。对于大多数用户来说,这绝对没问题。

然而,一个人发现他们可以使用该应用几个小时,并且只有在关闭该应用并再次打开它时,才发现没有保存任何内容。

没有错误,没有崩溃。该应用程序继续完全可用。它只是没有将任何内容保存到磁盘。

当他们继续使用该应用程序时,同样的事情发生了,它不会将任何内容保存到磁盘。当那个人重新启动他们的手机时,这个问题实际上已经解决了(没有更改代码)。

我想知道这是否可能是磁盘空间问题?该应用在他们的手机上大约有 170mb,而且他们有大约 300mb 的可用空间。

我愿意接受任何建议。就我个人而言,我宁愿让应用程序崩溃,也不愿让某人继续使用它几个小时,而他们没有意识到没有任何东西保存到磁盘上。

我正在使用 Magical Record 来实现我的核心数据。

我使用的是MR_saveToPersistentStoreAndWait,现在我切换到了MR_saveToPersistentStoreAndWaitWithError。但我什至不知道要检查什么,因为我不知道它是否会引发错误。

【问题讨论】:

是否可以为用户提供启用了额外日志记录的构建?自第一次以来问题是否再次出现? 据我所知,这种情况再也没有发生过。我可能会为他们提供额外的日志记录。 重现性是关键,如果不重现问题,日志构建不会有太大帮助。 也可以指出您的代码存在错误。 谢谢,是的,复制它会很理想。在这一点上,我不知道该怎么做。我想我会尝试将它放在内存不足的设备上,看看如果它没有足够的空间来保存它会做什么。但实际上我正在寻找任何其他的想法从哪里开始。 【参考方案1】:

虽然我不能确定我是否在报告问题的用户设备上重现了该问题。我能够重现我的应用程序将继续运行但不会将任何内容保存到磁盘的场景。

我通过手动创建一个不符合实体模型验证规则的对象来做到这一点。

当试图保存上下文时,它吐出了一个错误,但应用程序继续运行,就好像没有问题一样。

【讨论】:

以上是关于java为啥需要持久化?的主要内容,如果未能解决你的问题,请参考以下文章

(为啥)我们需要在 RDD 上调用缓存还是持久化

为啥做网站后台开发要用到JAVA和JS?

为啥mysql在持久化上比redis用的多

java实体类为啥要实现serlializable接口

为啥需要在执行修改查询之前清除 jpa 持久性上下文?

为啥不同数据源的持久化单元查询同一个数据源?