java - Spring Jpa save() 从子实体中删除列

标签 java spring hibernate spring-boot spring-data-jpa

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";
}

成员.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);

}

我使用 spring boot 和 spring jpa 与 hibernate 一起使用 save() 方法保存或更新 CandRef 实体。 更新“EDJ_CANDD_REF”表后,保存方法会调用“REF_GRP_MBER”表上的删除。现在在这种情况下,私有(private)集成员始终为null,我无法理解为什么它试图从子表中删除列。

我不想删除/更新任一子表中的任何列。我确实在可连接上尝试了 insertable = false, updatable = false 但不起作用

有人可以帮我吗?

提前致谢。

delete 
from
    ref_grp_mber 
where
    ref_grp_id=?

最佳答案

当这种情况发生时,你到底要改变什么?如果成员发生变化,那么这是一种逻辑行为,因为表 REF_GRP_MBER 存储与成员的关系,如果成员发生变化,旧记录将被删除,并根据变化添加新记录

关于java - Spring Jpa save() 从子实体中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58978937/

相关文章:

java - 如何建模多对多关系

java - 如何使用 JPA - EntityGraph 只加载实体@Basic 属性的一个子集?

java - 实现自定义 NFC 管理器的最简单方法是什么?

java - 使用仅包含非抽象方法的抽象类

java - 该配置引用了未知类 'String'

java - Spring Batch : Could not increment identity; nested exception is com. microsoft.sqlserver.jdbc.SQLServerException : Invalid object name 'BATCH_JOB_SEQ' ?

java - 如何获取所有 Spring 配置文件名称?

java - Spring InitializingBean 不适用于 CDI

java - Spring MessageSource 没有从属性文件中获取消息

java - Spring data jpa - 具有表的所有可能值的字段