使用非主键列的 Hibernate 连接
Hibernate join using non-primary key column
我有两个表:
users:
- user_id (primary)
- ip (unique)
- etc ..
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;
}
我有两个表:
users:
- user_id (primary)
- ip (unique)
- etc ..
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;
}