当前位置: 首页 > 面试题库 >

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

阴永福
2023-03-14
问题内容

我正在使用Spring&Hibernate开发webapp。

表1:基本表

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

我需要基于序列表。该SerialTable2可能包含的值从任一Serial1Serial2来自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加入?可能吗?


问题答案:

解决方案1

在上创建一个数据库视图,该视图Table1公开外键引用Table2。从您发布的查询中投影外键,无论如何您将使用该外键进行视图。然后将您的实体映射到视图。

解决方案2

使用连接公式:

例如,在映射的实体中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的时间是非常脆弱的(我设法使这项工作只为许多-to-
one关联,我不得不作出Entity2执行Serializable;否则,它不工作,并投掷了一些奇怪的NullPointer-ClassCastException为s)。



 类似资料:
  • 问题内容: 我正在寻找一种将POJO直接转换为JacksonTreeModel的方法。我知道存在从POJO到JSON-String的转换,并且支持TreeModel到JSON-String的转换—但是我正在寻找POJO到TreeModel的转换。有办法吗? 用例如下: 服务器端模板是使用Mustache的Java实现完成的。这使用了Jackson的TreeModel。 之后,我需要在客户端上精简版

  • 问题内容: 我想从数据库中的表中获取列名列表。使用编译指示,我会得到一个元组列表,其中包含很多不需要的信息。有没有办法只获取列名?所以我最终可能会遇到这样的事情: [Column1,Column2,Column3,Column4] 之所以绝对需要此列表,是因为我想在列表中搜索列名并获取索引,因为很多代码中都使用了索引。 有没有办法得到这样的清单? 谢谢 问题答案: 您可以使用sqlite3和pep

  • 问题内容: 我的软件在UTF8中得到的字符串比我转换为ISO 8859 1所需的字符串多。我知道UTF8域比iso 8859大。但是UTF8中的数据先前已从ISO上转换,所以我不应该错过任何内容。 我想知道是否存在从UTF8转换为iso-8859-1的简单/直接方法。 谢谢 问题答案: 这是您可能会发现有用的功能:。它可以转换为(包括欧元,但没有),但是对于-> -> 往返的-> 转换部分,它也可

  • 背景: 所以我有一个方法调用,我想保存到一个文本文件中。这样做的目的是将可运行的序列化对象保存到文本文件中,并在以后从文本文件中获取要执行的对象。 错误是: 我理解错误,Runnable是一个接口,它不能被序列化。然而,我还能做些什么来解决我的问题吗? 解决方案尝试1。错误

  • 有没有办法列出AWS中的所有资源?对于所有区域,所有资源...例如列出所有EC2实例、所有VPC、API Gateway中的所有API等...我想列出我帐户的所有资源,因为我很难找到我现在可以放弃的资源。

  • 我正在尝试创建一个神经网络来下棋,但首先,我需要将棋盘转换为整数列表。我正在使用国际象棋棋盘和游戏的python国际象棋模块。我目前有一个国际象棋棋盘类,但找不到将其转换为列表的方法。 我试过使用方法,但它返回的格式方案很难转换。 下面是我需要的代码: 现在,使用我得到的方法 如您所见,解析并转换为整数列表非常困难,因为有和。 预期的输出是这样的(逐行): 例如,这些可以是映射到PEICE的整数: