使用非主键列的 Hibernate 连接

Hibernate join using non-primary key column

我有两个表:

  1. users:

    • user_id (primary)
    • ip (unique)
    • etc ..
  2. services_to_ip

    • id (primary)
    • service_id
    • ip
    • etc ..

在class用户:

@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'?

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

JoinColumn 只会指定持有外键的列的名称,因此更改 joincolumn 的名称绝对没有帮助。

Hibernate 将默认使用主键进行连接,如果你想覆盖它,你可以简单地在你的关系中使用 referencedColumnName,但引用的列应该是 unique

如上所述Amer Qarabsa

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