2013-05-15 24 views
1

我有一个一对多的映射,它将用户(UserDetails)映射到车辆的ArrayList。我想知道是否有可能覆盖它引用表车辆(vehicleid)的ID在user_details_vehicle在一对多映射中更改外键的默认名称:HIBERNATE

@OneToMany 
@ForeignKey(name="FK_USER_DETAILS") 
@JoinTable(name="user_details_vehicles", 
    joinColumns={@JoinColumn(name="user_id")}, 
    inverseJoinColumns={@JoinColumn(name="vehicle_id") 
    } 
) 
public Collection<Vehicle> getVehicles() { 
    return vehicles; 
} 

的创建,我想在最后陈述默认外键名是:

CREATE TABLE user_details_vehicles (
user_id int(11) NOT NULL, 
vehicle_id int(11) NOT NULL, 
UNIQUE KEY vehicle_id (vehicle_id), 
KEY FK_USER_DETAILS (user_id), 
KEY FK_VEHICLE (vehicle_id), 
CONSTRAINT FK_VEHICLE FOREIGN KEY (vehicle_id) REFERENCES vehicle (vehicleId), 
CONSTRAINT FK_USER_DETAILS FOREIGN KEY (user_id) REFERENCES user_details (user_id) 
) 

这只是为了学习的目的。

回答

0

你已经使用ForeignKey.name。设置ForeignKey.inverseName来命名其他FK。

+0

谢谢。有用。感谢大家。 – yovan786

0

是只是改变它在

inverseJoinColumns = {@ JoinColumn(name = “vehicle_id”)

,如果你想把它当作my_vehicle_id

then set inverseJoinColumns={@JoinColumn(name="my_vehicle_id") 
+0

谢谢,但我在谈论默认生成的外键。示例Hibernate为外键生成密钥FKE74E2618AF42C7A1。我想重写默认名称以使其更有意义。 – yovan786

+0

这听起来不对,如果hibernate正在创建这些表,这些列是根据您的映射命名的,但是您告诉我休眠在默认情况下创建了FKE74E2618AF42C7A1列? – Ziul

+0

没有先生,我在谈论外键而不是列的名称。 – yovan786