【发布时间】:2015-02-03 00:52:33
【问题描述】:
我一整天都在尝试解决这个问题,但没有运气!我也尝试阅读网上的大部分教程,但你们都知道,它们都充满了无用的示例,无法反映您在现实世界中的需要。
这是我的情况:
数据库:
table: vehicles(vehicleId, brand, model, devYear, regNumber)
table: extras(vehicleId, allowSmoke, allowFood, allowDrinks, airConditioner)
关键是,如果我有一个类 Vehicle 和一个类 TravelExtras 映射到数据库,我希望 Vehicle 类有一个属性 TravelExtras travelExtras 和 get 和 set 方法。
不幸的是,当我尝试将对象持久保存在数据库中时,无论我尝试了什么,我都会遇到各种错误。
这是一个插图:
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "NaStopPU" );
EntityManager entitymanager = emfactory.createEntityManager( );
entitymanager.getTransaction( ).begin( );
TravelExtra travelExtra = new TravelExtra();
entitymanager.persist(travelExtra);
Vehicle vehicle = new Vehicle(2L, "10152487958556242", "Mazda", "626", "334343", 2005, 4);
vehicle.setTravelExtra(travelExtra);
entitymanager.persist(vehicle);
entitymanager.getTransaction().commit();
entitymanager.close( );
emfactory.close( );
任何人都知道这种一对一的情况要使用什么样的注释吗?
【问题讨论】:
-
您是否有充分的理由不允许 JPA 提供程序向
vehicles或extras添加额外的 FK 列? -
您正在尝试使用相同的 PK 创建 OneToOne 映射?在这种情况下,您应该为每个表有单独的 PK,在这种情况下,主实体上的 CascadeType.ALL 是车辆。否则,如果您有“是”关系,则在 JPA 中对两个表使用相同的 PK 是有意义的
-
你的例子没有意义。 Vehicle 是 TravelExtra PK 的一部分。但是,现在您首先插入 TravelExtra,而您没有指代任何车辆。插入时它根本不是有效的 PK。