【发布时间】:2013-03-01 15:03:00
【问题描述】:
为了使我的 java 代码更简单,我想将两行合并为一,因为我确实需要这两行才能使用数据。
假设这些是我表的字段:
ID, FIELD1, FIELD2, DISCRIMINATOR, VALUE
显然,ID 是主键。 FIELD1 和 2 让我们识别一个由 2 行组成的“组”,它们的区别仅在于 DISCRIMINATOR 和 VALUE(鉴别器指示值代表什么)
我希望每个“组”有一个 POJO(其中 FIELD1 和 2 将用作复合 ID),例如:
FIELD1, FIELD2, VALUE1, VALUE2
地点:
VALUE1 = 鉴别器 A 的 VALUE
VALUE2 = 鉴别器 B 的值
在 SQL 中,我会这样请求:
SELECT a.FIELD1, a.FIELD2, a.VALUE as VALUE1, b.VALUE as VALUE2
FROM TABLE a, TABLE b
WHERE a.FIELD1 = b.FIELD1 and a.FIELD2 = b.FIELD2
AND a.DISCRIMINATOR = 'A'
AND b.DISCRIMINATOR = 'B'
不幸的是,我不知道如何让它进入休眠状态,我现在对所有可能性感到困惑。
我宁愿将解决方案作为映射的 XML,但如果别无选择,我仍然会采用注释解决方案。
【问题讨论】:
-
您在考虑表格。 Hibernate 是一种 ORM 解决方案,可让您假装对象是宇宙的中心。您应该考虑对象或放弃 Hibernate 以获得基于 SQL 的解决方案,例如 Spring JdbcTemplate 或 iBatis。
-
谢谢,不幸的是,应用程序已经使用休眠进行了很多处理,我无法控制为 db 和 api 所做的选择。不过,我会在以后的作品中记住这一点。
-
它不必是全有或全无的解决方案。您不必强迫 Hibernate 完成这一切。为什么直接 SQL 不能在这里工作?
-
我误解了你的评论,我想我会尝试使用它,因为应用程序已经在使用 spring 框架。谢谢
-
这对我来说听起来更好——SimpleJdbcTemplate 和映射就可以正常工作。让 Spring 来做吧。
标签: hibernate join self discriminator composite-id