我有一个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();
答案 0 :(得分:0)
我对发电机有同样的问题。默认情况下它是AUTO,所以让它像这样
@Id
@GeneratedValue(
@Column(name = "leaverequestid")
private int leaverequestid;