如何更新映射表

问题描述 投票:0回答:1

我正在尝试做一个迷你项目,其中有人可以增加发病率的情况,其他人可以评论它。但问题是当我试图评论事件时,旧评论更新了新评论而不是创造一个新的记录。我正在使用映射能够具有incidentId和commentId作为列。

如果我要为incidentId = 1添加注释,它会被添加并反映在映射表中,但如果我再次尝试为相同的因素1添加一个注释(即1),它就会变得过时。

我的IncidenceDO是

    package com.incture.metrodata.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@Table(name="INCIDENCE_DETAILS")
@Getter
@Setter
@ToString
public class IncidenceDo implements BaseDo {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="INCIDENCE_ID")
    private String incidenceId;

    @Column(name="PRIORITY")
    private String priority;

    @Column(name="TITLE")
    private String title;

    @Column(name="BODY")
    private String body;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "CREATED_AT")
    private Date createdAt;

    @Column(name="CREATED_BY")
    private String createdBy;

    @Column(name="TRIP_ID")
    private String tripId;

    @Column(name="SHIPMENT_ID")
    private Long shipmentId;

    @Column(name="RECIPIENT")
    private String recipient;

    @Column(name="LATITUDE")
    private Double latitude;

    @Column(name="LOGITUDE")
    private Double logitude;

    @Column(name="ADDRESS")
    private String address;

    @Column(name="DELETED")
    private Integer deleted=0;

    @OneToMany(targetEntity = CommentsDo.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name="INCIDENCE_COMMENTS",joinColumns={ @JoinColumn(name="INCIDENCE_ID") },inverseJoinColumns = {
            @JoinColumn(name = "COMMENT_ID") })
    private List<CommentsDo> comments=new ArrayList<CommentsDo>();

    @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "INCIDENCE_USERS", joinColumns = { @JoinColumn(name = "INCIDENCE_ID") }, inverseJoinColumns = {
            @JoinColumn(name = "USER_ID") })
    private Set<UserDetailsDo> users=new HashSet<UserDetailsDo>(0);

    public void setDeleted() {
        this.deleted=1;
    }

    @Override
    public Object getPrimaryKey() {
        // TODO Auto-generated method stub
        return incidenceId;
    }

}

我的评论是

 package com.incture.metrodata.entity;

import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

    enter code here

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@Table(name="COMMENTS")
@Getter
@Setter
@ToString
public class CommentsDo implements BaseDo{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "COMMENT_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long commentId;

    @Lob
    private String comment;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "CREATED_AT")
    private Date createdAt;

    @Column(name = "CREATED_BY")
    private String createdBy;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "UPDATED_AT")
    private Date updatedAt;

    @Column(name = "IS_DELETED")
    private int isDeleted=0;

    @Override
    public Object getPrimaryKey() {

        return commentId;
    }
}

保存评论的方法

// Create
public D create(D dto,E dos) throws Exception {
    // persisting the dto
    E e = importDto(dto,dos);
    persist(e);
    getSession().flush();
    getSession().clear();
    return exportDto(e);
}

importto()方法是

   IncidenceDo importDto(IncidenceDTO dto, IncidenceDo dos) throws Exception {

    if (ServicesUtil.isEmpty(dos))
        dos = new IncidenceDo();
    if (!ServicesUtil.isEmpty(dto)) {

        if (!ServicesUtil.isEmpty(dto.getIncidenceId()))
            dos.setIncidenceId(dto.getIncidenceId());

        if (!ServicesUtil.isEmpty(dto.getPriority()))
            dos.setPriority(dto.getPriority());

        if (!ServicesUtil.isEmpty(dto.getBody()))
            dos.setBody(dto.getBody());

        if (!ServicesUtil.isEmpty(dto.getTitle()))
            dos.setTitle(dto.getTitle());

        if (!ServicesUtil.isEmpty(dto.getCreatedAt()))
            dos.setCreatedAt(dto.getCreatedAt());

        if (!ServicesUtil.isEmpty(dto.getTripId()))
            dos.setTripId(dto.getTripId());

        if (!ServicesUtil.isEmpty(dto.getShipmentId()))
            dos.setShipmentId(dto.getShipmentId());

        if (!ServicesUtil.isEmpty(dto.getRecipient()))
            dos.setRecipient(dto.getRecipient());

        if (!ServicesUtil.isEmpty(dto.getLatitude()))
            dos.setLatitude(dto.getLatitude());

        if (!ServicesUtil.isEmpty(dto.getLogitude()))
            dos.setLogitude(dto.getLogitude());

        if (!ServicesUtil.isEmpty(dto.getDeleted()))
            dos.setDeleted(dto.getDeleted());

        if (!ServicesUtil.isEmpty(dto.getCreatedBy()) && dto.getCreatedBy() instanceof String) {
            dos.setCreatedBy(dto.getCreatedBy().toString());
        }




        // parsing comments
        if (!ServicesUtil.isEmpty(dto.getComments())) {
            List<CommentsDo> comments = commentDao.importList(dto.getComments(), dos.getComments());
            dos.setComments(comments);
        }

importList

public List<E> importList(List<D> dList,List<E> eList) throws Exception {
        List<E> list = new ArrayList<E>();
        for (D d : dList) {
            E dos = null;
            try {
                dos = getByKeysForFK(d);
                for(E e : eList){
                  if( d.getPrimaryKey().equals(e.getPrimaryKey())){
                      dos = e;
                      break;
                  }
                }

            } catch (Exception e) {
            }

            list.add(importDto(d,dos));
        }
        return list;
    }
java hibernate
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.