28
@OneToOne()
@JoinColumn(name="vehicle_id", referencedColumnName="vehicleId")
public Vehicle getVehicle() {
    return vehicle;
}

私の UserDetails クラスには、Entity クラス Vehicle との 1 対 1 のマッピングがあります。Hibernate2 つのテーブルを作成し、 vehicle_id 列 (UserDetails テーブル) を主キー vehicleId (Vehicle テーブル) にマップする汎用外部キーを割り当てます。

KEY FKB7C889CEAF42C7A1 (vehicle_id),
CONSTRAINT FKB7C889CEAF42C7A1 FOREIGN KEY (vehicle_id) REFERENCES vehicle (vehicleId)

私の質問は、この生成された外部キーを、たとえば Fk_userdetails_vehicle のような意味のあるものに変更するにはどうすればよいかということです。

4

4 に答える 4

33

JPA 2.1 以降、 @javax.persistence.ForeignKeyアノテーションを使用できます。

@OneToOne()
@JoinColumn(name="vehicle_id", referencedColumnName="vehicleId", foreignKey=@ForeignKey(name = "Fk_userdetails_vehicle"))
public Vehicle getVehicle() {
    return vehicle;
}

JPA 2.1 より前では、Hibernate の@org.hibernate.annotations.ForeignKeyアノテーションを使用できましたが、これは非推奨になりました。

@OneToOne()
@JoinColumn(name="vehicle_id", referencedColumnName="vehicleId")
@ForeignKey(name="Fk_userdetails_vehicle")
public Vehicle getVehicle() {
   return vehicle;
}
于 2013-05-15T12:23:37.850 に答える
28

また、次のよう@ForeignKeyに埋め込みを 使用することもできます。@JoinColumn

@JoinColumn(name = "BAR_ID", foreignKey = @ForeignKey(name = FK_BAR_OF_FOO))

次のように使用して埋め込む@ManyToManyことができるリレーションの場合:foreignKeyinverseForeignKey@JoinTable

@JoinTable(name = "ARC_EMPLOYEE_OF_BAR"
        , joinColumns = {@JoinColumn(name = "BAR_ID")}
        , inverseJoinColumns = {@JoinColumn(name = "EMPLOYEE_ID")}
        , uniqueConstraints = {@UniqueConstraint(name = "ARC_UK_EMPLOYEE_OF_BAR", columnNames = {"EMPLOYEE_ID", "BAR_ID"})}
        , foreignKey = @ForeignKey(name = "ARC_FK_BAR_OF_EMPLOYEE")
        , inverseForeignKey = @ForeignKey(name = "ARC_FK_EMPLOYEE_OF_BAR"))
于 2015-05-15T10:18:11.080 に答える
-3

@ForeignKey注釈を追加して、これを試してみてください:

@ManyToOne
@ForeignKey(name="FK_some_model")
@JoinColumn(name="some_model_id")
private SomeModel someModel
于 2013-05-15T12:23:59.463 に答える