java - 主键约束违规 : Hibenate Save Method Not updating but trying to insert new row with same primary key

标签 java hibernate spring-boot jpa

我在我的项目中使用 Hibenate+ JPA + Spring boot ,我遇到的问题是 - 当我尝试保存代码中描述的实体时,整个实体以及子实体都被正确保存,但是当我尝试更新它抛出主键违规异常的实体,我做错了什么吗? 我使用 postgressql 作为数据库

ProposeSubjects.Java


@Entity
@Table(name = "proposed_subjects", schema = "acadcore",
        uniqueConstraints
        = @UniqueConstraint(columnNames = {"proposal_code", "subject_prop_id"}))
@IdClass(ProposedSubjectsPK.class)
@XmlRootElement
public class ProposedSubjects extends InstituteAwareSmileEntity {

    int confirm_seq;
    @Id
    Integer subject_prop_id;

    public int getConfirm_seq() {
        return confirm_seq;
    }

    public void setConfirm_seq(int confirm_seq) {
        this.confirm_seq = confirm_seq;
    }

    public Integer getSubject_prop_id() {
        return subject_prop_id;
    }

    public void setSubject_prop_id(Integer subject_prop_id) {
        this.subject_prop_id = subject_prop_id;
    }

    @NotEmpty(message = "{error.notEmpty}")
    @Pattern(regexp = "[a-zA-Z0-9]*", message = "This field must be character only")
    @Size(max = 200, message = "Should not exceed 200 characters")
    @Column(name = "proposal_code", unique = true)
    private String proposalcode;

    public String getProposalcode() {
        return proposalcode;
    }

    public void setProposalcode(String proposalcode) {
        this.proposalcode = proposalcode;
    }

    @NotEmpty(message = "{error.notEmpty}")
    @Pattern(regexp = "[a-zA-Z]*", message = "This field must be character only")
    @Size(max = 50, message = "Should not exceed 50 characters")
    @Column(name = "deptcode")
    private String deptcode;

    @NotEmpty(message = "{error.notEmpty}")
    @Size(max = 5000, message = "Should not exceed 5000 characters")
    @Column(name = "objectives")
    private String objectives;

    @Column(name = "start_session")
    private BigInteger startSession;

    @Pattern(regexp = "[a-zA-Z0-9]*", message = "This field must be character only")
    @Size(max = 50, message = "Should not exceed 50 characters")
    @Column(name = "schedule_code")
    private String scheduleCode;

    @Column(name = "overlaped_subject")
    @Pattern(regexp = "[a-zA-Z0-9]*", message = "This field must be character only")
    @Size(max = 5000, message = "Should not exceed 5000 characters")
    private String overlapedSubject;

    @Column(name = "percent_overlap")
    @DecimalMax(value = "100.00", message = "Can't Be More Than 100")
    @DecimalMin(value = "0.00", message = "Can't Be Less Than 0")
    private BigInteger percentOverlap;

    @Size(max = 5000, message = "Should not exceed 5000 characters")
    @Column(name = "reason_for_new_sub")
    private String reasonForNewSub;

    @NotEmpty(message = "{error.notEmpty}")
    @Size(max = 100, message = "Should not exceed 100 characters")
    @Column(name = "evaluation_committee")
    private String evaluationCommittee;

    @Column(name = "new_course_flag")
    private Character newCourseFlag;

    @Size(max = 50, message = "Can't be more than 50 ")
    @Column(name = "doc_id")
    private String docId;

    @Size(max = 300)
    @Column(name = "correction_note")
    private String correctionNote;

    @Size(max = 50)
    @Column(name = "entry_by")
    private String entryBy;

    @NotEmpty(message = "{error.notEmpty}")
    @Pattern(regexp = "[a-zA-Z0-9\\s]*", message = "This field must be character only")
    @Size(max = 200, message = "Should not exceed 200 characters")
    @Column(name = "subject_name")
    private String subjectName;

    @NotEmpty(message = "{error.notEmpty}")
    @Size(max = 10000, message = "Should not exceed 10000 characters")
    @Column(name = "subject_contents")
    private String subjectContents;

    @Column(name = "l")
    @DecimalMax(value = "10.00", message = "Can't Be More Than 10")
    @DecimalMin(value = "0.00", message = "Can't Be Less Than 0")
    private BigInteger l;

    @Column(name = "t")
    @DecimalMax(value = "10.00", message = "Can't Be More Than 10")
    @DecimalMin(value = "0.00", message = "Can't Be Less Than 0")
    private BigInteger t;

    @Column(name = "p")
    @DecimalMax(value = "10.00", message = "Can't Be More Than 10")
    @DecimalMin(value = "0.00", message = "Can't Be Less Than 0")
    private BigInteger p;

    @Column(name = "credit")
    @DecimalMax(value = "100.00", message = "Can't Be More Than 10")
    @DecimalMin(value = "0.00", message = "Can't Be Less Than 0")
    private BigInteger credit;

    @Column(name = "entry_on")
    @Temporal(TemporalType.TIMESTAMP)
    private Date entryOn;

    @NotNull(message = "{error.notEmpty}")
    @Column(name = "schedule_type")
    private Character scheduleType;

    @Column(name = "contract_hour")
    private BigInteger contractHour;

    @Size(max = 50)
    @Column(name = "status")
    private String status;
    @Size(max = 50)
    @Column(name = "modified_by")
    private String modifiedBy;
    @Column(name = "modification_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date modificationTime;
    @Size(max = 50)
    @Column(name = "created_by")
    private String createdBy;
    @Column(name = "creation_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date creationTime;
    @Size(max = 100)
    @Column(name = "workflowid")
    private String workflowid;

    @Column(name = "instanceid")
    private Integer instanceid;

    @Size(max = 500)
    @Column(name = "prerequisite")
    private String prerequisite;
    @Size(max = 50)
    @Column(name = "subno")
    private String subno;

    @Size(max = 5000, message = "Should not exceed 5000 characters")
    @Column(name = "reference_books")
    private String referenceBooks;

    @Size(max = 5000, message = "Should not exceed 5000 characters")
    @Column(name = "text_books")
    private String textBooks;

    @Column(name = "confirm_flag")
    private Character confirmFlag;

    @Size(max = 500, message = "Should not exceed 5000 characters")
    @Column(name = "concurrent_subjects")
    private String concurrentSubjects;

    @Column(name = "level_code")
    private Integer levelCode;

    @Size(max = 100)
    @Column(name = "teacher_ec")
    private String teacherEc;

    @NotNull(message = "{error.notEmpty}")
    @Column(name = "subject_type")
    private String subjectType;

    @OneToMany(fetch = FetchType.LAZY,
            cascade = CascadeType.ALL, mappedBy = "proposedSubjects")
    private List<ProposedCourseCompType> proposedCourseCompTypeCollection;

    public ProposedSubjects() {
    }

    public String getDeptcode() {
        return deptcode;
    }

    public void setDeptcode(String deptcode) {
        this.deptcode = deptcode;
    }

    public String getObjectives() {
        return objectives;
    }

    public void setObjectives(String objectives) {
        this.objectives = objectives;
    }

    public BigInteger getStartSession() {
        return startSession;
    }

    public void setStartSession(BigInteger startSession) {
        this.startSession = startSession;
    }

    public String getScheduleCode() {
        return scheduleCode;
    }

    public void setScheduleCode(String scheduleCode) {
        this.scheduleCode = scheduleCode;
    }

    public String getOverlapedSubject() {
        return overlapedSubject;
    }

    public void setOverlapedSubject(String overlapedSubject) {
        this.overlapedSubject = overlapedSubject;
    }

    public BigInteger getPercentOverlap() {
        return percentOverlap;
    }

    public void setPercentOverlap(BigInteger percentOverlap) {
        this.percentOverlap = percentOverlap;
    }

    public String getReasonForNewSub() {
        return reasonForNewSub;
    }

    public void setReasonForNewSub(String reasonForNewSub) {
        this.reasonForNewSub = reasonForNewSub;
    }

    public String getEvaluationCommittee() {
        return evaluationCommittee;
    }

    public void setEvaluationCommittee(String evaluationCommittee) {
        this.evaluationCommittee = evaluationCommittee;
    }

    public Character getNewCourseFlag() {
        return newCourseFlag;
    }

    public void setNewCourseFlag(Character newCourseFlag) {
        this.newCourseFlag = newCourseFlag;
    }

    public String getDocId() {
        return docId;
    }

    public void setDocId(String docId) {
        this.docId = docId;
    }

    public String getCorrectionNote() {
        return correctionNote;
    }

    public void setCorrectionNote(String correctionNote) {
        this.correctionNote = correctionNote;
    }

    public String getEntryBy() {
        return entryBy;
    }

    public void setEntryBy(String entryBy) {
        this.entryBy = entryBy;
    }

    public String getSubjectName() {
        return subjectName;
    }

    public void setSubjectName(String subjectName) {
        this.subjectName = subjectName;
    }

    public String getSubjectContents() {
        return subjectContents;
    }

    public void setSubjectContents(String subjectContents) {
        this.subjectContents = subjectContents;
    }

    public BigInteger getL() {
        return l;
    }

    public void setL(BigInteger l) {
        this.l = l;
    }

    public BigInteger getT() {
        return t;
    }

    public void setT(BigInteger t) {
        this.t = t;
    }

    public BigInteger getP() {
        return p;
    }

    public void setP(BigInteger p) {
        this.p = p;
    }

    public BigInteger getCredit() {
        return credit;
    }

    public void setCredit(BigInteger credit) {
        this.credit = credit;
    }

    public Date getEntryOn() {
        return entryOn;
    }

    public void setEntryOn(Date entryOn) {
        this.entryOn = entryOn;
    }

    public Character getScheduleType() {
        return scheduleType;
    }

    public void setScheduleType(Character scheduleType) {
        this.scheduleType = scheduleType;
    }

    public BigInteger getContractHour() {
        return contractHour;
    }

    public void setContractHour(BigInteger contractHour) {
        this.contractHour = contractHour;
    }

    public String getStatus() {
        return status;
    }

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

    public String getModifiedBy() {
        return modifiedBy;
    }

    public void setModifiedBy(String modifiedBy) {
        this.modifiedBy = modifiedBy;
    }

    public Date getModificationTime() {
        return modificationTime;
    }

    public void setModificationTime(Date modificationTime) {
        this.modificationTime = modificationTime;
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreationTime() {
        return creationTime;
    }

    public void setCreationTime(Date creationTime) {
        this.creationTime = creationTime;
    }

    public String getWorkflowid() {
        return workflowid;
    }

    public void setWorkflowid(String workflowid) {
        this.workflowid = workflowid;
    }

    public Integer getInstanceid() {
        return instanceid;
    }

    public void setInstanceid(Integer instanceid) {
        this.instanceid = instanceid;
    }

    public String getPrerequisite() {
        return prerequisite;
    }

    public void setPrerequisite(String prerequisite) {
        this.prerequisite = prerequisite;
    }

    public String getSubno() {
        return subno;
    }

    public void setSubno(String subno) {
        this.subno = subno;
    }

    public String getReferenceBooks() {
        return referenceBooks;
    }

    public void setReferenceBooks(String referenceBooks) {
        this.referenceBooks = referenceBooks;
    }

    public String getTextBooks() {
        return textBooks;
    }

    public void setTextBooks(String textBooks) {
        this.textBooks = textBooks;
    }

    public Character getConfirmFlag() {
        return confirmFlag;
    }

    public void setConfirmFlag(Character confirmFlag) {
        this.confirmFlag = confirmFlag;
    }

    public String getConcurrentSubjects() {
        return concurrentSubjects;
    }

    public void setConcurrentSubjects(String concurrentSubjects) {
        this.concurrentSubjects = concurrentSubjects;
    }

    public Integer getLevelCode() {
        return levelCode;
    }

    public void setLevelCode(Integer levelCode) {
        this.levelCode = levelCode;
    }

    public String getTeacherEc() {
        return teacherEc;
    }

    public void setTeacherEc(String teacherEc) {
        this.teacherEc = teacherEc;
    }

    public String getSubjectType() {
        return subjectType;
    }

    public void setSubjectType(String subjectType) {
        this.subjectType = subjectType;
    }

    public void addComponent(ProposedCourseCompType Component) {
        Component.setProposedSubjects(this);
        this.proposedCourseCompTypeCollection.add(Component);
    }

    @Override
    public String toString() {
        return "ProposedSubjects{" + "confirm_seq=" + confirm_seq + ", subject_prop_id=" + subject_prop_id + ", proposalcode=" + proposalcode + ", deptcode=" + deptcode + ", objectives=" + objectives + ", startSession=" + startSession + ", scheduleCode=" + scheduleCode + ", overlapedSubject=" + overlapedSubject + ", percentOverlap=" + percentOverlap + ", reasonForNewSub=" + reasonForNewSub + ", evaluationCommittee=" + evaluationCommittee + ", newCourseFlag=" + newCourseFlag + ", docId=" + docId + ", correctionNote=" + correctionNote + ", entryBy=" + entryBy + ", subjectName=" + subjectName + ", subjectContents=" + subjectContents + ", l=" + l + ", t=" + t + ", p=" + p + ", credit=" + credit + ", entryOn=" + entryOn + ", scheduleType=" + scheduleType + ", contractHour=" + contractHour + ", status=" + status + ", modifiedBy=" + modifiedBy + ", modificationTime=" + modificationTime + ", createdBy=" + createdBy + ", creationTime=" + creationTime + ", workflowid=" + workflowid + ", instanceid=" + instanceid + ", prerequisite=" + prerequisite + ", subno=" + subno + ", referenceBooks=" + referenceBooks + ", textBooks=" + textBooks + ", confirmFlag=" + confirmFlag + ", concurrentSubjects=" + concurrentSubjects + ", levelCode=" + levelCode + ", teacherEc=" + teacherEc + ", subjectType=" + subjectType + ", proposedCourseCompTypeCollection=" + proposedCourseCompTypeCollection + '}';
    }

    @XmlTransient
    public List<ProposedCourseCompType> getProposedCourseCompTypeCollection() {
        return proposedCourseCompTypeCollection;
    }

    public void setProposedCourseCompTypeCollection(List<ProposedCourseCompType> proposedCourseCompTypeCollection) {
        this.proposedCourseCompTypeCollection = proposedCourseCompTypeCollection;
    }

}

提议的CourseCompType.Java


@Entity
@Table(name = "proposed_course_comp_type", catalog = "smiledb1", schema = "acadcore")
@IdClass(ProposedCourseCompTypePK.class)
@NamedQueries({
    @NamedQuery(name = "ProposedCourseCompType.findAll", query = "SELECT p FROM ProposedCourseCompType p")})
public class ProposedCourseCompType extends InstituteAwareSmileEntity {
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "proposed_course_comp_type_id")
    private int proposedCourseCompTypeId;

    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "subject_prop_id")
    private int subjectPropId;


    @Size(max = 50)
    @Column(name = "course_id")
    private String courseId;
    @Column(name = "schedule_id")
    private Integer scheduleId;
    @Size(max = 50)
    @Column(name = "type_id")
    private String typeId;
    @Size(max = 50)
    @Column(name = "created_by")
    private String createdBy;
    @Column(name = "creation_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date creationTime;
    @Size(max = 50)
    @Column(name = "modified_by")
    private String modifiedBy;
    @Column(name = "modification_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date modificationTime;
    @Basic(optional = false)
    @NotNull
    @Column(name = "prop_confirm_sequence")
    private int propConfirmSequence;
    @Size(max = 50)
    @Column(name = "addon_type")
    private String addonType;
    @Size(max = 100)
    @Column(name = "new_course_proposal_id")
    private String newCourseProposalId;

    @JoinColumns({
        @JoinColumn(name = "subject_prop_id", referencedColumnName = "subject_prop_id", insertable = false, updatable = false)
        , @JoinColumn(name = "institute_id", referencedColumnName = "institute_id", insertable = false, updatable = false)})
    @ManyToOne(optional = false,fetch = FetchType.LAZY)
    private ProposedSubjects proposedSubjects;

//    public ProposedCourseCompType() {
//    }

//    public ProposedCourseCompType() {
//        throw new UnsupportedOperationException("Not supported yet 54."); //To change body of generated methods, choose Tools | Templates.
//    }

    public String getCourseId() {
        return courseId;
    }

    @Override
    public String toString() {
        return "ProposedCourseCompType{" + "proposedCourseCompTypeId=" + proposedCourseCompTypeId + ", subjectPropId=" + subjectPropId + ", courseId=" + courseId + ", scheduleId=" + scheduleId + ", typeId=" + typeId + ", createdBy=" + createdBy + ", creationTime=" + creationTime + ", modifiedBy=" + modifiedBy + ", modificationTime=" + modificationTime + ", propConfirmSequence=" + propConfirmSequence + ", addonType=" + addonType + ", newCourseProposalId=" + newCourseProposalId + '}';
    }

    public void setCourseId(String courseId) {
        this.courseId = courseId;
    }

    public Integer getScheduleId() {
        return scheduleId;
    }

    public void setScheduleId(Integer scheduleId) {
        this.scheduleId = scheduleId;
    }

    public String getTypeId() {
        return typeId;
    }

    public void setTypeId(String typeId) {
        this.typeId = typeId;
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreationTime() {
        return creationTime;
    }

    public void setCreationTime(Date creationTime) {
        this.creationTime = creationTime;
    }

    public String getModifiedBy() {
        return modifiedBy;
    }

    public void setModifiedBy(String modifiedBy) {
        this.modifiedBy = modifiedBy;
    }

    public Date getModificationTime() {
        return modificationTime;
    }

    public void setModificationTime(Date modificationTime) {
        this.modificationTime = modificationTime;
    }

    public int getPropConfirmSequence() {
        return propConfirmSequence;
    }

    public void setPropConfirmSequence(int propConfirmSequence) {
        this.propConfirmSequence = propConfirmSequence;
    }

    public String getAddonType() {
        return addonType;
    }

    public void setAddonType(String addonType) {
        this.addonType = addonType;
    }

    public String getNewCourseProposalId() {
        return newCourseProposalId;
    }

    public void setNewCourseProposalId(String newCourseProposalId) {
        this.newCourseProposalId = newCourseProposalId;
    }

    public ProposedSubjects getProposedSubjects() {
        return proposedSubjects;
    }

    public void setProposedSubjects(ProposedSubjects proposedSubjects) {
        this.proposedSubjects = proposedSubjects;
        this.subjectPropId = proposedSubjects.subject_prop_id;
    }

    public int getProposedCourseCompTypeId() {
        return proposedCourseCompTypeId;
    }

    public void setProposedCourseCompTypeId(int proposedCourseCompTypeId) {
        this.proposedCourseCompTypeId = proposedCourseCompTypeId;
    }

    public int getSubjectPropId() {
        return subjectPropId;
    }

    public void setSubjectPropId(int subjectPropId) {
        this.subjectPropId = subjectPropId;
    }



}
.
.
.

 public Map subjectProposalFormSubmit(ProposedSubjects form) {
        synchronized (this) {

            System.out.println("TESTING THE FORM BEFORE SETTING : " + form.toString());

            Integer currID = form.getSubject_prop_id();
            if (currID > 0) {
            } else {
                String Prop_sub_maxID = subProposal.getMaxID();
                if (Prop_sub_maxID == null) {
                    Prop_sub_maxID = "1";
                } else {
                    Prop_sub_maxID = String.valueOf(Integer.parseInt(Prop_sub_maxID) + 1);
                }
                form.setSubject_prop_id(Integer.parseInt(Prop_sub_maxID) + 1);
            }
            Integer Comp_sub_maxID = compTypeRepo.getMaxID();
            if (Comp_sub_maxID == null) {
                Comp_sub_maxID = 1;
            } else {
                Comp_sub_maxID = Comp_sub_maxID + 1;
            }

            ProposedSubjectsPK id = new ProposedSubjectsPK();
            id.setSubjectPropId(form.getSubject_prop_id());
            id.setInstituteId(InstituteContextHolder.getInstitute());

            List<ProposedCourseCompType> components = form.getProposedCourseCompTypeCollection();
            List<ProposedCourseCompType> settingList = new ArrayList<>();

            for (ProposedCourseCompType Component : components) {
                if (Component.getProposedCourseCompTypeId() > 0) {
                    if (!(Component.getScheduleId() == null)) {
                        Component.setProposedSubjects(form);
                        settingList.add(Component);
                    }
                } else {
                    if (!(Component.getScheduleId() == null)) {
                        Component.setProposedCourseCompTypeId(Comp_sub_maxID++);
                        Component.setProposedSubjects(form);
                        settingList.add(Component);
                    }
                }
            }

            String teachers = form.getTeacherEc();
            if (teachers.contains(",")) {
                String[] teacher_list = teachers.split(",");
                for (int i = 0; i < teacher_list.length; i++) {
                    if (empMasterRepo.findByEmpno(teacher_list[i]).isEmpty()) {
                        Map map = new HashMap();
                        map.put("teacherEc", teacher_list[i] + ": Not a valid teacher ID");
                        return map;
                    }
                }
            }

            String Prereq_expression = form.getPrerequisite();
            if (!Prereq_expression.isEmpty()) {
                try {
                    if (validate(Prereq_expression)) {

                    } else {
                        Map map = new HashMap();
                        map.put("expression_list", Prereq_expression + ": Not a valid Expression");
                        return map;
                    }
                } catch (Exception ex) {
                    Logger.getLogger(AcademicService.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

            String concurrent_expression = form.getConcurrentSubjects();
            if (!concurrent_expression.isEmpty()) {
                try {
                    if (validate(concurrent_expression)) {

                    } else {
                        Map map = new HashMap();
                        map.put("expression_list", Prereq_expression + ": Not a valid Expression");
                        return map;
                    }
                } catch (Exception ex) {
                    Logger.getLogger(AcademicService.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

            form.setProposedCourseCompTypeCollection(settingList);
            ProposedSubjects entity = new ProposedSubjects();

            try {
                subProposal.findById(id).map(post -> {

                    post.setConcurrentSubjects(form.getConcurrentSubjects());
                    post.setConfirmFlag(form.getConfirmFlag());
                    post.setConfirm_seq(form.getConfirm_seq());
                    post.setContractHour(form.getContractHour());
                    post.setCorrectionNote(form.getCorrectionNote());
                    post.setCredit(form.getCredit());
                    post.setDeptcode(form.getDeptcode());
                    post.setDocId(form.getDocId());
                    post.setEvaluationCommittee(form.getEvaluationCommittee());
                    post.setL(form.getL());
                    post.setLevelCode(form.getLevelCode());
                    post.setNewCourseFlag(form.getNewCourseFlag());
                    post.setObjectives(form.getObjectives());
                    post.setOverlapedSubject(form.getOverlapedSubject());
                    post.setP(form.getP());
                    post.setPercentOverlap(form.getPercentOverlap());
                    post.setPrerequisite(form.getPrerequisite());
                    post.setProposalcode(form.getProposalcode());
                    for (int i = 0; i < post.getProposedCourseCompTypeCollection().size(); i++) {
                        post.getProposedCourseCompTypeCollection().get(i).setAddonType(form.getProposedCourseCompTypeCollection().get(i).getAddonType());
                        post.getProposedCourseCompTypeCollection().get(i).setCourseId(form.getProposedCourseCompTypeCollection().get(i).getCourseId());
                        post.getProposedCourseCompTypeCollection().get(i).setProposedCourseCompTypeId(form.getProposedCourseCompTypeCollection().get(i).getProposedCourseCompTypeId());
                        post.getProposedCourseCompTypeCollection().get(i).setProposedSubjects(form);
                        post.getProposedCourseCompTypeCollection().get(i).setScheduleId(form.getProposedCourseCompTypeCollection().get(i).getScheduleId());
                        post.getProposedCourseCompTypeCollection().get(i).setSubjectPropId(form.getProposedCourseCompTypeCollection().get(i).getSubjectPropId());
                        post.getProposedCourseCompTypeCollection().get(i).setTypeId(form.getProposedCourseCompTypeCollection().get(i).getTypeId());
                    }
                    post.setReasonForNewSub(form.getReasonForNewSub());
                    post.setReferenceBooks(form.getReferenceBooks());
                    post.setScheduleCode(form.getScheduleCode());
                    post.setScheduleType(form.getScheduleType());
                    post.setStartSession(form.getStartSession());
                    post.setStatus(form.getStatus());
                    post.setSubjectContents(form.getSubjectContents());
                    post.setSubjectName(form.getSubjectName());
                    post.setSubjectType(form.getSubjectType());
                    post.setSubject_prop_id(form.getSubject_prop_id());
                    post.setSubno(form.getSubno());
                    post.setT(form.getT());
                    post.setTeacherEc(form.getTeacherEc());
                    post.setTextBooks(form.getTextBooks());
                    post.setWorkflowid(form.getWorkflowid());

                    System.out.println("posting");

                    ProposedSubjects P = subProposal.save(post);
//                    subProposal.saveOrUpdate(post);

                    System.out.println("posted: " + P.toString());
                    return P;

                }).orElse(entity = subProposal.save(form));

            } catch (Exception ex) {
                Logger.getLogger(AcademicService.class.getName()).log(Level.SEVERE, null, ex);
            }
            Map map = new HashMap();
            map.put("Success", "Data Successfully Submitted");
            return map;
        }

    }
.
.
.

最佳答案

注释方法subjectProposalFormSubmit中的以下行

post.setSubject_prop_id(form.getSubject_prop_id());

关于java - 主键约束违规 : Hibenate Save Method Not updating but trying to insert new row with same primary key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59150485/

相关文章:

java - 检查字符串是否包含反斜杠?

java - 如何将 OSGI Embed-Dependency 用于常见的第 3 方 JAR-s

java - 具有类继承的 Hibernate Subselect

java - 如何将日期时间存储在本地时间中,以便可以通过 hibernate 明确检索?

java - 在 Spring 项目中实现 JSR-303 注释

spring-boot - Spring Data JDBC 使用 Boot 2.3.0 生成错误的 HSQLDB 查询

java - Google Cloud Spring Boot InvoiceTargetException

java - 由 api 创建时,关系不会显示在 neo4j Web 浏览器中...neo4j 2.0.1

java - 如何向 Eclipse Project Explorer 工具栏添加按钮?

mongodb - @SpringBootTest 如何预填充嵌入式MongoDB?