Java 无法将元素添加到";“一对多”;关系,冬眠。

Java 无法将元素添加到";“一对多”;关系,冬眠。,java,hibernate,one-to-many,insert-update,Java,Hibernate,One To Many,Insert Update,我有以下问题:我无法将新的汽车添加到相应的客户实体。错误如下: Duplicate entry 'test_login' for key 'UK_l4t3rudi0h7ibnjpnbvcnkcbf' 其中'test\u login'是客户的登录名 这里是客户实体的代码 public class Customer{ @Id @GeneratedValue @Column (name = "id") private int id; @Column (nam

我有以下问题:我无法将新的
汽车
添加到相应的
客户
实体。错误如下:

Duplicate entry 'test_login' for key 'UK_l4t3rudi0h7ibnjpnbvcnkcbf'
其中
'test\u login'
客户的登录名

这里是
客户
实体的代码

public class Customer{
    @Id
    @GeneratedValue
    @Column (name = "id")
    private int id;

    @Column (name = "login", nullable = false, unique = true)
    private String login;

    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL)
    private List<Vehicle> vehicles = new  ArrayList<>();

    public void addVehicle(Vehicle vehicle){
        vehicle.setCustomer(this);
        vehicles.add(vehicle);
    }
 }
@Entity
@Table(name = "vehicle")
public class Vehicle implements Serializable {
    @Id
    @GeneratedValue
    @Column (name = "id")
    private int id;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "customer_id")
    private Customer customer;
}
DAO实现类:

public void addANewVehicle(Vehicle vehicle, Customer customer) {

        customer.addVehicle(vehicle);
        Session session = sessionFactory.openSession();
        try {

            session.getTransaction().begin();
            session.save(customer);
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            logger.error("Error occurred while adding a new car. Error stack trace: " + e.toString());
        } finally {
            session.close();
        }
Field login设置为unique,当save customer不带主键时,hibernate将创建insert语句,Field login将重复

尝试加载客户并保存它

公共无效添加新车辆(车辆、客户){


save()用于插入新实体。您需要的是更新或合并现有实体。我理解这一点。我刚才说的是,您不应该使用save(),因为save()插入一个新客户,而您不需要。因此,请使用update()或merge()。好的,我尝试使用
更新
合并
,但我在
车辆
表上得到了约束冲突错误。您认为
添加车辆
是否正确实现?以及“约束冲突错误”的消息和堆栈跟踪是什么。
外键约束失败(
db_name
vehicle
,CONSTRAINT
fklwqsusj6iodeb0df1b554vxq`外键(
customer_id
)参考
customer
id))
@Column (name = "login", nullable = false, unique = true)
private String login;
    Session session = sessionFactory.openSession();
    try {

        session.getTransaction().begin();
        Customer cust = session.get(Customer.class,customer.getId());
        cust.addVehicle(vehicle);
        session.getTransaction().commit();

    } catch (Exception e) {
        session.getTransaction().rollback();
        logger.error("Error occurred while adding a new car. Error stack trace: " + e.toString());
    } finally {
        session.close();
    }