当我使用合并时,Hibernate会插入而不是更新

时间:2017-06-12 01:09:37

标签: java spring hibernate

我正在尝试使用Hibernate对数据库进行更新。当我调用merge时,它会在数据库中生成一个新行。我没有收到任何错误。鳕鱼正在工作,但我希望更新不插入。

型号:

@Entity
@Table(name = "Books")
public class Manual implements Serializable {
    @Id
    @GeneratedValue
    private int idManual;
    private String denumire;
    private String disciplina;
    private Date dataPostare;

    @Enumerated(EnumType.STRING)
    private TipManual tipManual;


    private String emailContact;
    private String telefonContact;
    private double pret;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "username")
    private User userName;

    public Manual() {

    }

    public Manual(int idManual, String denumire, String disciplina, Date dataPostare, TipManual tipManual,
            String emailContact, String telefonContact, double pret, User userName) {
        super();
        this.idManual = idManual;
        this.denumire = denumire;
        this.disciplina = disciplina;
        this.dataPostare = dataPostare;
        this.tipManual = tipManual;
        this.emailContact = emailContact;
        this.telefonContact = telefonContact;
        this.pret = pret;
        this.userName=userName;
    }

    public int getIdManual() {
        return idManual;
    }

    public void setIdManual(int idManual) {
        this.idManual = idManual;
    }

    public String getDenumire() {
        return denumire;
    }

    public void setDenumire(String denumire) {
        this.denumire = denumire;
    }

这是我的模型类,我也试图删除@GeneratedValue作为我的id,但问题是一样的。

我的合并功能:

@Override
    @Transactional
    public Manual updateBook(Manual book) {
        em.merge(book);
        em.flush();
        return book;
    }

2 个答案:

答案 0 :(得分:1)

当应用程序调用updateBook时,手动实体的 idManual 是否有价值?

选中此项,因为如果标识符不存在,将再次插入实体。

答案 1 :(得分:0)

如果您的实体是将要发生的分离实体,则更多info