Java @生成值-获取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

将车辆对象持久化到数据库中时自动生成ID。我怎样才能获得ID的值而不保持它

以下是代码:

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是错误的。