Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,什么是用于持久化对象的简单、直接的方法?所有方法都需要序列化吗?_Java_Serialization_Object_Persistence_Hashmap - Fatal编程技术网

Java,什么是用于持久化对象的简单、直接的方法?所有方法都需要序列化吗?

Java,什么是用于持久化对象的简单、直接的方法?所有方法都需要序列化吗?,java,serialization,object,persistence,hashmap,Java,Serialization,Object,Persistence,Hashmap,我对做这类事情还不熟悉,但我想找出一个简单的方法来持久化包含sashMap和列表的Java对象。我一直在研究这个问题,我相信我可以序列化它并保存到一个常规的数据库中,比如通过hibernate,但是我不太清楚这一点,即使在阅读了大量教程之后,因为我不确定一个常规列表是否可以序列化。我不希望得到关于如何做到这一点的完整答案,但我想知道,通常认为以最少不必要的复杂性来实现这一点的最佳方法是什么,因为我愿意使用不同于当前使用的数据库设置(hibernate with MySQL) 我看过一个像Mong

我对做这类事情还不熟悉,但我想找出一个简单的方法来持久化包含sashMap和列表的Java对象。我一直在研究这个问题,我相信我可以序列化它并保存到一个常规的数据库中,比如通过hibernate,但是我不太清楚这一点,即使在阅读了大量教程之后,因为我不确定一个常规列表是否可以序列化。我不希望得到关于如何做到这一点的完整答案,但我想知道,通常认为以最少不必要的复杂性来实现这一点的最佳方法是什么,因为我愿意使用不同于当前使用的数据库设置(hibernate with MySQL)

我看过一个像Mongo DB这样的选项,但对于是否需要在保存到Mongo DB之前序列化对象,我也有点困惑。我已经阅读了大量的文档,但我想确保我选择了最简单的方法来做这件事,这仍然是可靠的,我愿意接受建议,任何建议都将不胜感激。我将持久化的对象如下所示(尽管更复杂/嵌套)

公共类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);
    }

}