Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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_Hibernate_One To One - Fatal编程技术网

如何在Java中创建具有一对一关系的唯一数据库记录文件?

如何在Java中创建具有一对一关系的唯一数据库记录文件?,java,hibernate,one-to-one,Java,Hibernate,One To One,我有许多表,它们与Hibernate映射的表客户机有一对一的关系 在使用线程对每个表进行选择之后,我需要创建一个唯一客户机文件 每个表格(如发票、服务等)也将包含在文件中,但在客户列表之后(政府要求,不问为什么…) 我想到了三种不同的方法: 方法1:使用哈希集 在每次选择之后,我将客户机对象添加到HashSet中。遗憾的是,这个解决方案是不可伸缩的,因为表B可能有数百万条唯一记录,并可能导致OutOfMemory错误 方法2:使用视图 我还可以创建一个连接表的视图。问题在于,这些选择有许多复杂的

我有许多表,它们与Hibernate映射的表客户机有一对一的关系

在使用线程对每个表进行选择之后,我需要创建一个唯一客户机文件

每个表格(如发票、服务等)也将包含在文件中,但在客户列表之后(政府要求,不问为什么…)

我想到了三种不同的方法:

方法1:使用哈希集

在每次选择之后,我将客户机对象添加到HashSet中。遗憾的是,这个解决方案是不可伸缩的,因为表B可能有数百万条唯一记录,并可能导致OutOfMemory错误

方法2:使用视图

我还可以创建一个连接表的视图。问题在于,这些选择有许多复杂的规则,并且经常会发生更改。维护将是一场噩梦,因为它需要我更改程序和视图

方法3:使用临时表

我可以创建一个临时表来存储在每个表中找到的客户机对象,然后对该表执行选择


到目前为止,方法3似乎是最好的解决方案,但我想知道是否有更好的方法。如何改进我的设计?

我从错误的角度看待问题

我专注于在每个线程中选择数据库并创建不同的文件(即一个用于发票,一个用于服务等),然后将所有文件合并到一个文件中。这当然是一个解决方案,但它提出了上述问题

第二种方法是首先选择数据库上的记录(线程和所有线程)。然后,可以使用模板引擎(如FreeMarker、Chunk…)或自定义格式化程序创建文件

有很多方法可以通过线程实现这一点(即使run()方法返回一个void):

  • 使用带有FutureTask的ExecutorService来获取模型列表
  • 使用带有同步方法的静态对象来保存模型
  • 使用依赖注入在可运行对象上注入所述对象,使其成为单例

方法3对我来说很好。另一种方法是一些分布式缓存。