JPA Crud存储库中存在不一致的结果

时间:2019-02-15 22:53:23

标签: jpa

我们有一个通过API端点接收JSON事务的应用程序。每条消息都记录到我们数据库中的一个表中。该表的主键是控制号和时间戳的组合。该代码通过使用主键上的JPA存储库exist方法检查传入记录是否重复。在2月的前2周中,有9条传入记录被标记为重复记录。研究完每条记录后,其中5条被正确标识为重复项,而其中4条记录不应标记为重复项。我无法在数据库中找到这4条记录的另一条记录。我不确定为什么系统认为这4个重复。我确实注意到,TransactionMessageId将ctrlNbr定义为Long,并且构造函数将long与Long用作参数。这可能是造成问题的原因吗?我不确定是什么原因导致某些记录正确识别为重复记录,而某些记录被错误识别为重复记录不一致。任何建议将不胜感激。谢谢。

TransactionMessageId中的哈希码是Message对象的哈希,不包括原始JSON

TransactionMessageId

@Data
@Embeddable
public class TransactionMessageId implements Serializable {

private static final long serialVersionUID = 1L;

private Long ctrlNbr;
private Timestamp trnsmTs;

protected TransactionMessageId() {}

public TransactionMessageId(long hashCode, Timestamp ts) {
    ctrlNbr = hashCode;
    trnsmTs = ts;
};

TransactionMessage实体

@Data
@EqualsAndHashCode(callSuper=false, exclude = "posMessage")
@ToString(exclude = "posMessage")
@Entity
@Table(name = "TRANS_MESSAGE")
public class TransactionMessage extends BaseEntity implements 
Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId
@NotNull
private TransactionMessageId id;

消息对象

@Data
@EqualsAndHashCode(exclude={"rawJson"})
@JsonIgnoreProperties(ignoreUnknown = true)
public class Message {
private String storeNumber;
private Short registerNumber;
private Integer transId;

@JsonDeserialize(using = LocalDateDeserializer.class)  
private LocalDate tranSalesDate;
private String rawJson;

检查数据库中是否已存在事务的方法

@Transactional
private void save(TransactionMessage tm) throws Exception {

if (transactionMessageRepository.exists(tm.getId())) {       
 throw new 
 DataIntegrityViolationException("PK_TRANS_DATA_COMP_KEY");
}

TransactionMessageRepository

@Repository
public interface TransactionMessageRepository extends 
CrudRepository<TransactionMessage, TransactionMessageId> {
}

0 个答案:

没有答案
相关问题