2014-12-05 138 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