加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – Hibernate – 有没有办法将2列与1连接?

发布时间:2020-12-15 01:32:48 所属栏目:大数据 来源:网络整理
导读:我正在使用Spring amp进行webapp开发休眠. 表1:BaseTable +------------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+------------+--------------+------+-----+---------+----------------

我正在使用Spring& amp进行webapp开发休眠.

表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   |         |                |
+------------+--------------+------+-----+---------+----------------+

我需要根据连续出版物加入表格.表2中的Serial可能包含来自Table1的Serial1或Serial2的值,因此它应该像OR运算符一样进行比较.我正在使用hbm.xml表.没有注释映射.我加入了以下表:

我之前使用过这个查询:

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,但只使用了一个关键列.

如何在此方案中使用HBM.XML加入?可能吗?

最佳答案
解决方案1

在Table1上创建一个数据库视图,它暴露外键引用Table2.从您发布的查询中投射外键,无论如何都要用于视图.然后将您的实体映射到视图.

解决方案2

使用join formula:

例如,在映射到Table1的实体中定义与映射到Table2的实体的多对一关联(似乎是您的用例):

@ManyToOne
@JoinColumnsOrFormulas({
      @JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT t2.serial FROM Table2 t2 WHERE serial1 = t2.serial OR serial2 = t2.serial)",referencedColumnName="serial"))
    })
private Entity2 entity2;

但是,暂停连接公式似乎在Hibernate中非常脆弱(我设法使这项工作仅用于多对一关联,我必须使Entity2实现Serializable;否则它不起作用并抛出一些奇怪的NullPointer-和ClassCastExceptions).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读