Reputation: 63
I have two tables:
users:
- user_id (primary)
- ip (unique)
- etc ..
services_to_ip
- id (primary)
- service_id
- ip
- etc ..
In class User:
@OneToMany()
@JoinColumn(name = "ip", insertable = false, nullable = false, updatable = false)
public List<QPlanService> getPlanServices() {
return planServices;
}
Using MySQL query log we get something like that:
SELECT *
FROM services_users planservic0_
LEFT OUTER JOIN services qservice1_
ON planservic0_.service_id = qservice1_.id
WHERE planservic0_.ip = 777
In WHERE condition the 'user_id' field used (the default field is primary key - users.id) (user_id=777).
How can I specify that I need to take the value of the 'ip' field from User entity, not 'user_id'?
I will be grateful for any help!
Upvotes: 5
Views: 10230
Reputation: 298
As Amer Qarabsa mentioned above:
@OneToMany()
@JoinColumn(name = "ip", insertable = false, nullable = false, updatable = false, referencedColumnName="ipcolumnName")
public List<QPlanService> getPlanServices() {
return planServices;
}
Upvotes: 0
Reputation: 6574
JoinColumn
will only specify the name of the column holding the foreign key, so changing the name of joincolumn absolutely will not help.
Hibernate will be using the primary key by default for joining, if you want to override this you can simply use referencedColumnName
in your relation, but the referenced column should be unique
Upvotes: 9