【问题标题】:Hibernate join using non-primary key column使用非主键列的休眠连接
【发布时间】:2018-06-07 09:30:20
【问题描述】:

我有两张桌子:

  1. 用户:

    • user_id(主要)
    • ip(唯一)
    • 等等..
  2. services_to_ip

    • id(主要)
    • service_id
    • ip
    • 等等..

班级用户:

@OneToMany()
@JoinColumn(name = "ip", insertable = false, nullable = false, updatable = false)
public List<QPlanService> getPlanServices() {
    return planServices;
}

使用 MySQL 查询日志,我们会得到类似的结果:

SELECT *
FROM services_users planservic0_ 
     LEFT OUTER JOIN services qservice1_ 
          ON planservic0_.service_id = qservice1_.id 
WHERE planservic0_.ip = 777

在 WHERE 条件下使用“user_id”字段(默认字段是主键 - users.id)(user_id=777)。

如何指定我需要从用户实体中获取“ip”字段的值,而不是“user_id”?

如果有任何帮助,我将不胜感激!

【问题讨论】:

  • 您必须创建 HQL 查询,以便轻松连接 2 个表

标签: java hibernate jpa joincolumn


【解决方案1】:

JoinColumn 只会指定保存​​外键的列的名称,因此更改 joincolumn 的名称绝对无济于事。

默认情况下,Hibernate 将使用主键加入,如果你想覆盖它,你可以简单地在你的关系中使用 referencedColumnName,但引用的列应该是唯一的

【讨论】:

    【解决方案2】:

    正如上面提到的Amer Qarabsa

      @OneToMany()
        @JoinColumn(name = "ip", insertable = false, nullable = false, updatable = false, referencedColumnName="ipcolumnName")
        public List<QPlanService> getPlanServices() {
            return planServices;
        }
    

    【讨论】:

    • 不是columnName,应该是属性名
    猜你喜欢
    • 2017-02-24
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多