3

我在数据库中有一个类似于“国家/省/城市”的列,例如“加拿大/安大略/多伦多”。我需要将它们拆分并将它们映射到 3 个单独的 Java Bean 属性中。

我想知道在哪里最好做到这一点?

(1) 检索行时的 DAO (2) 调用域 (Bean) 作为 setter 是 getter (3) 解析查询中的行的 SQL 函数 (4) 使用 ResultSetExtractor

我倾向于#2 或#4,因为“贫血域”反模式似乎表明 Bean 是一个合适的地方。

4

4 回答 4

2

我不确定我是否同意你的看法;您可能会争辩说域实体不需要受数据表示的影响。
如果您的数据库布局不同,您会考虑使用带有 setter 和 getter 的 bean 吗?
我你的回答是“不”,那么你可能不想要那个选项。

就个人而言,我认为如果你有一个数据访问层,那是其工作的一部分——将数据表示转换为域表示。

于 2012-07-09T19:23:35.670 回答
1

恕我直言,最好的地方是数据库。我会将此列拆分为表中的 3 列,并按列存储一个信息。

如果由于遗留原因这确实不是一个选项,我确实会直接在域对象中执行此操作。这种行为可以直接封装在域对象中,而不会对其他实体产生任何影响。

于 2012-07-09T19:28:33.060 回答
0

如果这是一个 JPA @Entity,那么我会将私有 String 直接映射到 DB 列,然后制作公共 getter 来包装对它的访问。这样,您的域模型的消费者与连接字符串的内部/数据库表示隔离。或者,您可以在@PostLoad回调中进行翻译。(持久化的反向翻译可以在@PrePersist回调中完成。)

于 2012-07-09T19:35:24.053 回答
0

您的 1. 和 4. 实际上不是相同的解决方案吗?我想你会使用ResultSetExtractor你的 DAO 代码。使用 SQL 函数并不是一个坏主意,因为它可以从其他技术中重用,但存在维护问题。

我不建议将解析延迟到有时间,因为从性能方面来看它并不好,并且在使用这些字段执行其他任务时会使您的生活变得复杂。如果你的 bean 已经有了这三个字段,那就更干净了。

于 2012-07-09T20:02:16.200 回答