当前位置: 首页 > 知识库问答 >
问题:

HQLHibernate不相关实体,但id相同

杜焕
2023-03-14
    null
  public class Verification implements Serializable {
     private Long verificationId;
     private Long salesManCode;
     private Long clientCode;
     ...
  }

  public class Contract implements Serializable {
     private Long contractId;
     private Long salesManCode;
     private Long clientCode;
     ...
  }

这些类有各自的hbm.xml映射,在数据库模型中,这些表没有关联,在hibernate映射中也没有关联,但是在保存合同时,它必须在contractID字段(业务规则)中具有相同的verificationID,但在某些情况下,也给出了没有验证的合同。

verification
 verificationId | salesManCode | clientCode
  1050              1001            2056
  1051              1001            2248
  1054              1002            2856

contract
 contractId | salesManCode |clientCode
  1050         1001          2056         <- this contract have verification
  1051         1001          2248         <- this contract have verification
  1052         1025          2822         <- this contract not have verification
  1053         1254          1547         <- this contract not have verification
  1054         1002          2856         <- this contract have verification

我的问题是当我运行HQL查询时:

select con.salesManCode,  ver.salesManCode, con.clientCode, ver.clientCode, con.contracId, ver.verificationId 
from Verification ver, Contract con
where ver.verificationId = con.contractId

但Hibernate使用交叉连接语句翻译并合并所有记录。是否有方法在hbm.xml文件中的非相关类之间执行HQL查询?

规则:不应是映射的实体。

共有1个答案

康赞
2023-03-14

您可以按照以下方式映射两个表之间的联接关系:

@Entity
public class Verification implements Serializable {
    private Long verificationId;

    private Long salesManCode;
    private Long clientCode;
    ...
}

@Entity
public class Contract implements Serializable {
    private Long contractId;        

    @MapsId
    @OneToOne
    @JoinColumn(name = "contractId", referencedColumnName = "verificationId")
    private Verification verification;

    private Long salesManCode;
    private Long clientCode;
}

您的查询变为:

select con.salesManCode, ver.salesManCode, con.clientCode, ver.clientCode, con.contracId, ver.verificationId 
from Contract con
join con.verification ver

所以不是交叉连接,而是内部连接。

 类似资料:
  • 我试图坚持两个实体,它们有一对一和多对一的关系。 我正在尝试将表单集合嵌入到表单中。 我有一个多对一相关的实体,每次我创建一个新的课程简历,它与Candidat列相关candidat_id_id为空。 除了数据可数据中的Candidat id之外,只有实体Curendar umVitae被成功创建和持久化。 简历表 id|titre|candidat_id_id|id_education cand

  • 我有一个类似实体的流程,由一个用户创建、更新。当我尝试应用过滤器时。我已经在数据库中创建了外键关系。现在,当我使用JPA规范应用动态过滤器时,我得到了一个异常

  • 目前只有音频,视频等多媒体待补充完善

  • 媒体库相关 一.流程 1.通过调用 申请视频ID接口 获取系统分配的视频ID 2.前端JS拿到视频ID相关参数,执行上传操作 3.将视频关联到房间 二.相关接口 1.申请视频ID 地址: https://ccapi.csslcloud.net/api/v1/video/createuploadinfo 备注: 需要THQS加密请求 方法: POST/GET 请求参数 参数名称 参数类型 参数

  • 不确定为什么UserEntity没有被填充为此调用的一部分。

  • 我想不出如何摆脱这个错误: 无法跟踪实体类型“Relations”的实例,因为已在跟踪键值为“{id:26}”的另一个实例。附加现有实体时,确保只附加一个具有给定键值的实体实例。 我尝试将实体从上下文中分离出来,但即使这样也不能阻止这个错误的发生。有人能给我指出我做错了什么吗? 服务 存储库 关系实体 更新 我试着替换 与 但关系实体上的任何属性都不会更新。