Java,什么是用于持久化对象的简单、直接的方法?所有方法都需要序列化吗?
我对做这类事情还不熟悉,但我想找出一个简单的方法来持久化包含sashMap和列表的Java对象。我一直在研究这个问题,我相信我可以序列化它并保存到一个常规的数据库中,比如通过hibernate,但是我不太清楚这一点,即使在阅读了大量教程之后,因为我不确定一个常规列表是否可以序列化。我不希望得到关于如何做到这一点的完整答案,但我想知道,通常认为以最少不必要的复杂性来实现这一点的最佳方法是什么,因为我愿意使用不同于当前使用的数据库设置(hibernate with MySQL) 我看过一个像Mongo DB这样的选项,但对于是否需要在保存到Mongo DB之前序列化对象,我也有点困惑。我已经阅读了大量的文档,但我想确保我选择了最简单的方法来做这件事,这仍然是可靠的,我愿意接受建议,任何建议都将不胜感激。我将持久化的对象如下所示(尽管更复杂/嵌套)Java,什么是用于持久化对象的简单、直接的方法?所有方法都需要序列化吗?,java,serialization,object,persistence,hashmap,Java,Serialization,Object,Persistence,Hashmap,我对做这类事情还不熟悉,但我想找出一个简单的方法来持久化包含sashMap和列表的Java对象。我一直在研究这个问题,我相信我可以序列化它并保存到一个常规的数据库中,比如通过hibernate,但是我不太清楚这一点,即使在阅读了大量教程之后,因为我不确定一个常规列表是否可以序列化。我不希望得到关于如何做到这一点的完整答案,但我想知道,通常认为以最少不必要的复杂性来实现这一点的最佳方法是什么,因为我愿意使用不同于当前使用的数据库设置(hibernate with MySQL) 我看过一个像Mong
公共类TestClass{
publicmap primaryHolder=新HashMap;
公共addRecord(整数键,映射输入映射){
添加(键,输入映射);
}
}
感谢您的建议无论何时将对象持久化到DB,您都需要序列化该对象。无论何时将对象持久化到DB,您都需要序列化该对象。查看对象数据库,如或。它们提供了保存对象的非常简单的方法
就我个人而言,我使用过NeoDatis,不需要实现可序列化接口或任何类似的功能。查看对象数据库,如或。它们提供了保存对象的非常简单的方法 就我个人而言,我使用过NeoDatis,我不需要实现可序列化接口或任何类似的功能。不幸的是,“简单”和“直接”通常不能与“SQL”或“数据库”融为一体。Java集合类型不容易映射到集合或文档 “正确”的解决方案(就SQL而言)是为列表元素创建一个表,然后为内部映射(
Integer
->list
)创建一个表,为外部映射创建一个表
如果您的结构包含多个元素,您将不会喜欢它的性能
因此,另一种解决方案是一个BLOB
列和Serializable
接口。这还有其他问题,如:
- 你总是要把整个结构都装上
- 结构中的所有元素都必须可序列化
- 如果你不能装载一件,你就不能装载任何东西,等等)
- 如果您想将对象添加到通过Hibernate映射到表的结构中,则需要一些技巧将实例转换为其主键,并在保存和加载期间返回
你应该考虑一个OO数据库,它可以保存任何Java对象,但是在编写代码时需要不同的心态:突然,你需要考虑像运行java java集合上的D4O查询之类的事情。Java集合类型不容易映射到集合或文档
“正确”的解决方案(就SQL而言)是为列表元素创建一个表,然后为内部映射(Integer
->list
)创建一个表,为外部映射创建一个表
如果您的结构包含多个元素,您将不会喜欢它的性能
因此,另一种解决方案是一个BLOB
列和Serializable
接口。这还有其他问题,如:
- 你总是要把整个结构都装上
- 结构中的所有元素都必须可序列化
- 如果你不能装载一件,你就不能装载任何东西,等等)
- 如果您想将对象添加到通过Hibernate映射到表的结构中,则需要一些技巧将实例转换为其主键,并在保存和加载期间返回
你应该考虑一个OO数据库,它可以保存任何Java对象,但是在编写代码时需要不同的心态:突然,你需要考虑像运行java集合上的D4O查询之类的事情。
java序列化和持久性是两个完全不同的概念。序列化是关于将对象与串行字节流进行转换。而持久性是以持久的方式存储对象,例如通过Hibernate将对象存储在数据库中。你感兴趣的是什么?@jmg:嗯,它们是相关的话题。随着序列化的工作,您有了一个简单的持久性方法。两者都处理将内存中的“活动”对象图转换为“冻结”表示。@jmg我的目标只是对象的持久性,这是我困惑的一部分,因为据我所知,我需要序列化一个对象以将其存储在常规数据库中,例如通过Hibernate存储到MySQL后端。实际上,我可能会对一种完全避免序列化的方法感兴趣,只要我能够以可靠的方式持久化它,然后将它作为原始类型的Java对象返回。关于hibernate的这个主题可能有助于u序列化和持久化是两个完全不同的概念。序列化是关于将对象与串行字节流进行转换。而持久性是以持久的方式存储对象,例如通过Hibernate将对象存储在数据库中。你感兴趣的是什么?@jmg:嗯,它们是相关的话题。随着序列化的工作,您有了一个简单的持久性方法。两者都处理将内存中的“活动”对象图转换为“冻结”表示的问题。@jmg我的目标只是对象的持久性,这是public class TestClass {
public Map <Integer, Map> primaryHolder = new HashMap <Integer, Map>;
public addRecord (Integer key, Map inputMap<Integer, List>) {
primaryHolder.add(key, inputMap);
}
}