2

我有许多表与表客户端具有一对一的关系,由 Hibernate 映射。

在使用线程对这些表中的每一个进行选择后,我需要创建一个唯一客户端文件。

这些表格中的每一个(例如 Invoice、Service 等)也将包含在文件中,但在客户列表之后(政府要求,不要问为什么......)。

我想到了 3 种不同的方法来做到这一点:

方法一:使用HashSet

每次选择后,我将 Client 对象添加到 HashSet。遗憾的是,此解决方案不可扩展,因为表 B 可能有数百万条唯一记录,并可能导致 OutOfMemory 错误。

方法2:使用视图

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

方法三:使用临时表

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

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

4

1 回答 1

0

我以错误的视角看待问题。

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

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

使用线程有很多方法可以做到这一点(即使 run() 方法返回 void):

  • 使用带有 FutureTask 的 ExecutorService 来获取模型列表;
  • 使用具有同步方法的静态对象来保存模型;
  • 使用依赖注入将所述对象注入 Runnable 对象,使其成为单例。
于 2013-04-04T19:50:24.007 回答