我正在使用Spring开发webapp & Hibernate。Hibernate - 有没有办法将2列加入1?
表1:BaseTable
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| Id | bigint(20) | NO | PRI | | auto_increment |
| Serial1 | varchar(255) | YES | | NULL | |
| Serial2 | varchar(255) | YES | | NULL | |
| ModelNum | varchar(255) | YES | | NULL | |
| ... | .... | .. | 0 | | |
+------------+--------------+------+-----+---------+----------------+
表2:DetailTable
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| Id1 | varchar(20) | NO | PRI | | |
| Id2 | varchar(20) | NO | PRI | | |
| Id3 | varchar(20) | NO | PRI | | |
| Serial | varchar(255) | YES | | NULL | |
| ... | .... | .. | 0 | | |
+------------+--------------+------+-----+---------+----------------+
我需要加入基于连续的表。在Table2
中的Serial
可以包含来自Serial1
或Serial2
的值,从Table1
,因此它应该像OR运算符那样比较。我为表使用hbm.xml。没有注释映射。我用这个查询之前
<one-to-one name="notes"
class="Notes" entity-name="Notes">
</one-to-one>
:
SELECT A.* FROM Table2 As a INNER JOIN Table1 As b
ON (a.Serial = b.Serial1 or a.Serial = b.Serial2);
我通过这个http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/associations.html去,但只使用了1键列我加入表等。
如何在这种情况下使用HBM.XML加入?可能吗?
示例:T1.Serial1包含A,T1.Serial2包含B表2的串行A有两个行,一个串行B?你预期的结果是什么?您可能希望两次加入同一个表并将别名结果别名,但我可能是错的...'select * from table1 T1 LEFT JOIN table2 T2a on T1.Serial1 = T2a.Serial LEFT JOIN table2 T2b on T1.Serial = T2b.Serial'这将把表2合并为一行。使用一个OR,你会得到多个行,每个table1 ID ......这可能是你想要的......因此需要看到预期的结果。 – xQbert
它应该选择两行。 –
@xQbert:我已经添加了我正在使用的查询。我想用Java代码来代替Query,这个代码的意思是Spring/Hibernate –