Java @生成值-获取ID的值
将车辆对象持久化到数据库中时自动生成ID。我怎样才能获得ID的值而不保持它 以下是代码:Java @生成值-获取ID的值,java,hibernate,annotations,Java,Hibernate,Annotations,将车辆对象持久化到数据库中时自动生成ID。我怎样才能获得ID的值而不保持它 以下是代码: public class Vehicle{ @Id @GeneratedValue int id; private int year; private String model; //getters, setters } 更新 public void updateVehicle(Vehicle vehicle) { em.getT
public class Vehicle{
@Id
@GeneratedValue
int id;
private int year;
private String model;
//getters, setters
}
更新
public void updateVehicle(Vehicle vehicle) {
em.getTransaction().begin();
Vehicle vehicleDB = em.find(Vehicle.class, vehicle.getId());
vehicleDB.setYear(vehicle.getYear());
vehicleDB.setModel(vehicle.getModel());
em.getTransaction().commit();
}
您不能这样做,因为它是在持久化时由数据库生成的。在此之前,id没有定义。在保存之前,我们无法获取它,但简单的解决方案是,在保存对象之前,您可以通过select查询获取它。您是否有此语句的源代码?从逻辑上讲,您无法预测对象的id,因为数据库负责管理自动递增列的id。您的应用程序无法确定数据库下一步将生成哪个ID。也许数据库策略是每次向新ID添加2。而不是简单地增加1。我需要生成ID的值来设置车辆对象的ID。我想我不明白您的意图。如果对象不是托管/持久的,则它没有ID。如果它已经是持久的,则它已经有ID。是的,如果实体管理器以前加载过,则将在对象中设置ID。这种解决方案可能会进入竞争条件。不要那样做!假设解决方案不正确,序列可能与递增1不同,此外,在此选择之后和插入之前可能会发生插入,因此ID是错误的。