例外:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:键'PRIMARY'的重复条目'3- \ x01'

时间:2014-04-04 11:53:33

标签: java hibernate hibernate-mapping

我有一个Embeddable类和一个实体类。在My Entity类中,我使用了Embeddable类作为集合(Set)。但是当我要保存时,我正在获取此异常.Hi有人可以帮我解决这个问题。

例外:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '3-\x01' for key 'PRIMARY'

实体:

@Entity
@Table(name = "leaverequest")
public class LeaveRequestEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "leaverequestid")
    private int leaverequestid;
    @ManyToOne
    @JoinColumn(name = "leavePolicyType")
    private LeavePolicyEntity leavePolicyType;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date startdate;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date enddate;
    private String reason;
    private float noofdays;

    @ManyToOne
    @JoinColumn(name = "requestEmpId")
    private EmployeeEntity requestEmpId;

    private boolean status;
    @ManyToOne
    @JoinColumn(name = "approvalEmpID")
    private EmployeeEntity approvalEmpID;

    @Column(name = "addeddate")
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date addeddate = new Date();

    @CollectionOfElements
//    @JoinTable(name = "LeaveAppliedDetails")
    private Set<LeaveAppliedDetails> leaveAppliedDetails = new HashSet<LeaveAppliedDetails>();

    @Column(name = "modifieddate")
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date modifieddate = new Date();

    public int getLeaverequestid() {
        return leaverequestid;
    }

    public void setLeaverequestid(int leaverequestid) {
        this.leaverequestid = leaverequestid;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public Date getStartdate() {
        return startdate;
    }

    public void setStartdate(Date startdate) {
        this.startdate = startdate;
    }

    public float getNoofdays() {
        return noofdays;
    }

    public void setNoofdays(float noofdays) {
        this.noofdays = noofdays;
    }

    public Date getEnddate() {
        return enddate;
    }

    public void setEnddate(Date enddate) {
        this.enddate = enddate;
    }

    public Date getAddeddate() {
        return addeddate;
    }

    public void setAddeddate(Date addeddate) {
        this.addeddate = addeddate;
    }

    public Date getModifieddate() {
        return modifieddate;
    }

    public void setModifieddate(Date modifieddate) {
        this.modifieddate = modifieddate;
    }

    public EmployeeEntity getRequestEmpId() {
        return requestEmpId;
    }

    public void setRequestEmpId(EmployeeEntity requestEmpId) {
        this.requestEmpId = requestEmpId;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public EmployeeEntity getApprovalEmpID() {
        return approvalEmpID;
    }

    public void setApprovalEmpID(EmployeeEntity approvalEmpID) {
        this.approvalEmpID = approvalEmpID;
    }

    public Set<LeaveAppliedDetails> getLeaveAppliedDetails() {
        return leaveAppliedDetails;
    }

    public void setLeaveAppliedDetails(Set<LeaveAppliedDetails> leaveAppliedDetails) {
        this.leaveAppliedDetails = leaveAppliedDetails;
    }

    public LeavePolicyEntity getLeavePolicyType() {
        return leavePolicyType;
    }

    public void setLeavePolicyType(LeavePolicyEntity leavePolicyType) {
        this.leavePolicyType = leavePolicyType;
    }

    public boolean addLeaveAppliedDetails(LeaveAppliedDetails e) {
        return leaveAppliedDetails.add(e);
    }
}

这是我的代码:

LeaveRequestEntity lre = new LeaveRequestEntity();
            lre.setStartdate(fromcal.getTime());
            lre.setEnddate(endCal.getTime());
            lre.setReason(lrf.getReason());
            lre.setRequestEmpId(msg.getEmpId());
            lre.setLeavePolicyType(lpe);

            while (!fromcal.after(endCal)) {
                System.out.println("fromcal.get(Calendar.DAY_OF_WEEK)" + fromcal.get(Calendar.DAY_OF_WEEK));
                boolean flag = false;
                if (!list.isEmpty() && list.contains(dateFormat.format(fromcal.getTime()) + "-" + sdf1.format(fromcal.getTime()))) {
                    flag = true;
                }
                if (excludeWeekends) {
                    if ((7 != fromcal.get(Calendar.DAY_OF_WEEK)) && (1 != fromcal.get(Calendar.DAY_OF_WEEK))) {
                        lad = new LeaveAppliedDetails();
                        lad.setLeaveDate(fromcal.getTime());
                        lad.setHalfDay(flag);
//                    leaveDetails.add(lad);
                        lre.addLeaveAppliedDetails(lad);
                        if (list.contains(lre)) {
                            actualDays += 0.5;
                        } else {
                            actualDays++;
                        }
                    }
                } else {
                    lad = new LeaveAppliedDetails();
                    lad.setLeaveDate(fromcal.getTime());
                    lad.setHalfDay(flag);
//                leaveDetails.add(lad);
                    lre.addLeaveAppliedDetails(lad);
                    if (flag) {
                        actualDays += 0.5;
                    } else {
                        actualDays++;
                    }
                }
                fromcal.add(Calendar.DATE, 1);
                totalDays++;
            }
//        System.out.println("leaveDetailsleaveDetailsleaveDetails" + leaveDetails);
            lre.setNoofdays(actualDays);
//        for (Iterator it = leaveDetails.iterator(); it.hasNext();) {
//            LeaveAppliedDetails object = (LeaveAppliedDetails) it.next();
//            System.out.println("object = " + object.hashCode());
//        }
//        lre.setLeaveAppliedDetails(leaveDetails);
            session.save(lre);

            session.beginTransaction().commit();

1 个答案:

答案 0 :(得分:0)

我对发电机有同样的问题。默认情况下它是AUTO,所以让它像这样

    @Id
    @GeneratedValue(
    @Column(name = "leaverequestid")
    private int leaverequestid;