使用非主键列

时间:2018-06-07 09:30:21

标签: java hibernate jpa joincolumn

我有两张桌子:

  
      
  1. 用户:

         
        
    • user_id(主要)
    •   
    • ip(unique)
    •   
    • 等..
    •   
  2.   
  3. services_to_ip

         
        
    • id(主要)
    •   
    • 的service_id
    •   
    • IP
    •   
    • 等..
    •   
  4.   

在班级用户中:

@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)。

如何指定我需要从User实体获取'ip'字段的值,而不是'user_id'?

我将不胜感激任何帮助!

2 个答案:

答案 0 :(得分:2)

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

Hibernate默认使用主键进行加入,如果你想覆盖它,你可以在关系中使用referencedColumnName,但引用的列应该是唯一

答案 1 :(得分:0)

如上所述Amer Qarabsa

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