Spring Jpa save() menghapus kolom dari entitas anak

CandRef.java

@Getter
@Setter
@AllArgsConstructor
@EqualsAndHashCode
@NoArgsConstructor
@Entity
@IdClass(CandRefKey.class)
@Table(name = "EDJ_CANDD_REF")
public class CandRef implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -7171464769202238804L;

@Id
@Column(name = "EDJ_CANDD_ID")
private Integer candId;

@Id
@Column(name = "EDJ_CANDD_INST_NO")
private Integer instNo;

@Id
@Column(name = "SEQ_NO")
private Integer seqNo;

@Column(name = "EFF_BEG_DA")
private LocalDate beginDate;

@Column(name = "EFF_END_DA")
private LocalDate endDate;

@Column(name = "EDJ_RQSTN_ID")
private Integer rqstnId;

@Column(name = "RCRT_STAT_CD")
private String statCd;

@Column(name = "RCRT_STAT_DA")
private LocalDate startDate;

@Column(name = "CANDD_ORG_CD")
private String orgCd;

@Column(name = "CANDD_ORG_TYPE_CD")
private String orgTypeCd;

@Column(name = "ISO_CTRY_CD")
private String ctryCd;

@Column(name = "REF_GRP_ID")
private Integer refGrpId;

@OneToMany
@JoinTable(name = "REF_GRP_MBER", joinColumns = {
    @JoinColumn(name = "REF_GRP_ID", referencedColumnName = "REF_GRP_ID") }, inverseJoinColumns = {
        @JoinColumn(name = "REF_MBER_ID", referencedColumnName = "REF_MBER_ID") })
private Set<Member> members;

@Column(name = "REF_CNT_IND")
private String cntInd;

@Column(name = "REF_CR_IND")
private String creditInd;

@Column(name = "EDJ_CANDD_TY_CD")
private String candTyCd;

@Column(name = "REF_EXC_TY_CD")
private String excTyCd;

@Column(name = "REF_EXC_REVW_STAT_CD")
private String revwStatCd;
}

GrpMember.java

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
@Entity
@IdClass(GrpMemberKey.class)
@Table(name = "REF_GRP_MBER")
public class GrpMember implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -6907938568490379028L;

@Id
@Column(name = "REF_GRP_ID")
private String refGrpId;

@Id
@Column(name = "REF_MBER_ID")
private Integer refMemberId;

@Column(name = "REF_CR_QTY")
private Double creditQty;

@CreationTimestamp
@Column(name = "CRE_TS", nullable = false, updatable= false)
private LocalDateTime createTimeStamp;

@Column(name = "CRE_PGM_NA", nullable = false, updatable= false)
private String createPrgmName;

@Column(name = "CRE_UID_CD", nullable = false, updatable= false)
private String createUIDCD;

@UpdateTimestamp
@Column(name = "REVSN_TS", nullable = false, insertable= false)
private LocalDateTime revisonTimeStamp;

@Column(name = "REVSN_PGM_NA", nullable = false, insertable= false)
private String revisonPrgmName ="RC_SVC";

@Column(name = "REVSN_UID_CD", nullable = false, insertable= false)
private String revisonUIDCD ="ATSWEB";
}

Anggota.java

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
@Entity
@Table(name = "REF_MBER")
public class Member {

@Id
@Column(name = "REF_MBER_ID")
private Integer refMemberId;

@Column(name = "EFF_BEG_DA")
private LocalDate beginDate;

@Column(name = "EFF_END_DA")
private LocalDate endDate;

@Column(name = "REF_EDJ_PRSN_ID")
private String refPrsnId;

@Column(name = "REF_LOC_CD")
private String refLocCd;

@Column(name = "EDJ_PRSN_GROUP_CD")
private String prsnGrpCd;

@Column(name = "REF_ORG_CD")
private String orgCd;

@Column(name = "REF_ORG_TYPE_CD")
private String orgTypeCd;

@Column(name = "ORG_ONLY_REF_IND")
private String orgRefInd;

@Formula("(SELECT g.REF_CR_QTY FROM REF_GRP_MBER g WHERE g.ref_mber_id = REF_MBER_ID)")
private Double creditQty;

@CreationTimestamp
@Column(name = "CRE_TS")
private LocalDateTime createTimeStamp;

@Column(name = "CRE_PGM_NA")
private String createPrgmName;

@Column(name = "CRE_UID_CD")
private String createUIDCD;

@UpdateTimestamp
@Column(name = "REVSN_TS")
private LocalDateTime revisonTimeStamp;

@Column(name = "REVSN_PGM_NA")
private String revisonPrgmName;

@Column(name = "REVSN_UID_CD")
private String revisonUIDCD;
}

CandRefRepository.java

public interface CandidateRefRepository extends CrudRepository<CandRef, CandRefKey> {

List<CandRef> findByCandIdOrderByInstNoDesc(Integer candId);

List<CandRef> findAllByCandIdAndStatCd(Integer candId, String statCd);

@Query(value = CandidateRefConstants.CURRENT_INSTANCE_WITH_EXCEPTION)
List<CandRef> fetchCurrentInstance();

@Query(value = CandidateRefConstants.CURRENT_MAX_SEQUENCE_BY_CANDID)
CandRef fetchCurrentMaxSequence(@Param("candId") Integer candId);

@Query(value = CandidateRefConstants.CURRENT_INSTANCE_BY_STATCD)
List<CandRef> fetchCurrentInstanceBycandId(@Param("candId") Integer candId);

}

Saya menggunakan spring boot dan spring jpa dengan hibernate untuk menyimpan atau memperbarui entitas CandRef menggunakan metode save(). Metode penyimpanan memanggil penghapusan pada tabel "REF_GRP_MBER" setelah pembaruan pada tabel "EDJ_CANDD_REF". Sekarang dalam kasus ini, anggota Set pribadi selalu null dan saya tidak dapat memahami mengapa ia mencoba menghapus kolom dari tabel anak.

Saya tidak ingin menghapus/memperbarui kolom mana pun di salah satu tabel anak. Saya telah mencoba insertable = false, updatable = false pada jointable yang tidak berhasil

Dapatkah seseorang tolong bantu saya di sini?

Terima kasih sebelumnya.

delete 
from
    ref_grp_mber 
where
    ref_grp_id=?

person Jai Kiran    schedule 21.11.2019    source sumber
comment
Anda harus menambahkan kode tempat Anda mengubah atau membuat entitas.   -  person Alan Hay    schedule 21.11.2019
comment
Saya hanya menggunakan metode save(candRef) dari repositori Spring jpa.   -  person Jai Kiran    schedule 21.11.2019
comment
Saya sadar akan hal itu. Bukan itu yang saya sarankan agar Anda posting.   -  person Alan Hay    schedule 22.11.2019


Jawaban (1)


Dan apa sebenarnya yang Anda ubah ketika hal ini terjadi? Jika anggota berubah, maka ini adalah perilaku logis, karena tabel REF_GRP_MBER menyimpan hubungan dengan anggota dan jika berubah, catatan lama dihapus dan yang baru ditambahkan sesuai dengan perubahan

person duck codes    schedule 21.11.2019
comment
Benar, anggota saat ini null sehingga hibernasi menganggapnya harus dihapus. Namun bagaimana cara mencegah perilaku ini? Saya mencoba updatetable = false di kolom gabung - person Jai Kiran; 21.11.2019