2014-12-05 198 views
0

我開始讀一本書STUDING JPA,他們給了一個單向的映射是這樣的:JPA:一個表的主鍵和另一個表的主鍵和外鍵

車輛

(vehicleId, brand, model, dev_year, extraId) 

vehicleId是PK, extraId是FK

travel_extra

(id, allowSmoke, allowFood, allowDrinks, airConditioner)

ID是PK

那麼Java對象:

public class Vehicle { 

    @Id 
    private long vehicleId; 
    private String brand; 
    private String model; 

    @OneToOne 
    @JoinColumn(name = "vehicleId") 
    private TravelExtra travelExtra; 
} 


public class TravelExtra { 

    @Id 
    private id; 

    private boolean allowSmoke; 
    private boolean allowFood; 
    private boolean allowDrinks; 
    private boolean airConditioner; 

} 

當我堅持提交它就像一個魅力的事務。

但是!對於我的情況我不希望車輛表具有外鍵,但我希望外鍵在travel_extra表和鏈接到車輛表的主鍵。但是當我這樣做的代碼不工作,無論我嘗試做我不能使它的工作。

如果有人曾經嘗試過這樣的事情,我會很高興爲一些幫助和例子如何使它的工作。

在此先感謝。

+0

可能重複[ JPA:也是主鍵映射的外鍵](http://stackoverflow.com/questions/27305950/jpa-foreign-key-that-is-also-a-primary-key-mapping) – 2014-12-05 13:21:19

+0

你應該編輯你的第一個問題已經有2個有效的建議。 – 2014-12-05 13:21:41

+0

建議不是非常準確,所以我決定問這個問題有點不同 – 2014-12-05 13:26:52

回答

1

試用,並在TravelExtra表中創建vehicleID列。 insertable = false, updateable = false應指示ORM查找目標表中的列。

EDIT

我的參考是this,在那裏它規定:

在JPA的JoinColumn限定插入可更新屬性,這些可以被用來指示JPA提供商外鍵實際上在目標對象的表中

如果它不工作(因爲它沒有被規範擔保),可以使雙向的關係(只是在TravelExtra實體添加映射,不需要進一步的數據庫更改)的

public class Vehicle { 
    ... 
    @OneToOne(mappedBy = "vehicle", cascade = CascadeType.ALL) 
    private TravelExtra travelExtra; 
    ... 
} 

public class TravelExtra { 
    ... 
    @OneToOne 
    @JoinColumn(name = "vehicleId") 
    private Vehicle vehicle; 
    ... 
} 
+0

這是我得到的: javax.persistence.RollbackException:異常[EclipseLink-4002](Eclipse持久性服務 - 2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DatabaseException 內部異常:java.sql .SQLException:字段'vehicleId'沒有默認值 錯誤代碼:1364 調用:INSERT INTO travel_extra(primaryKeyId,airConditioner,allowDrinks,allowFood,allowSmoke,luggage)VALUES(?,?,?,?,? ?) \t bind => [6參數綁定] 查詢:InsertObjectQuery(Core.TravelExtra [primaryKeyId = 1]) – 2014-12-05 15:54:09

+0

@JoroSeksa檢查我更新的答案。 – 2014-12-05 16:30:19

+0

我不希望TravelExtra有參考車輛 – 2014-12-06 15:47:10