Hibernate соединение с использованием столбца без первичного ключа - PullRequest
0 голосов
/ 07 июня 2018

У меня есть две таблицы:

  1. пользователи:

    • user_id (основной)
    • ip (уникальный)
    • и т. Д.
  2. services_to_ip

    • идентификатор (основной)
    • service_id
    • ip
    • и т.д ..

В классе User:

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

Буду благодарен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Как Амер Карабса упомянуто выше:

  @OneToMany()
    @JoinColumn(name = "ip", insertable = false, nullable = false, updatable = false, referencedColumnName="ipcolumnName")
    public List<QPlanService> getPlanServices() {
        return planServices;
    }
0 голосов
/ 07 июня 2018

JoinColumn будет указывать только имя столбца, содержащего внешний ключ, поэтому изменение имени joincolumn абсолютно не поможет.

Hibernate по умолчанию будет использовать первичный ключ для присоединения, если вычтобы переопределить это, вы можете просто использовать referencedColumnName в вашем отношении, но указанный столбец должен быть уникальным

...