当前位置: 首页 > 知识库问答 >
问题:

org.springframework.dao.DataIntegrityViolationException:不能执行语句;SQL

寇开畅
2023-03-14

这是我的实体类

@Entity
@Table(name = "sofort_payment")
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class SofortPaymentEntity extends BasicEntity {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", updatable = false, nullable = false)
    private UUID id;
    @Column(name = "referenced_transaction")
    private UUID referencedTransaction;
    @Column(name = "status")
    private String status;
    @Column(name = "reason")
    private String reason;
    @Column(name = "external_payment_id")
    private String externalPaymentId;
    @Column(name = "currency")
    private String currency;
    @Column(name = "amount")
    private BigDecimal amount;
    @Column(name = "iban")
    private String iban;
    @Column(name = "back_name")
    private String bankName;
    @Column(name = "sender_holder")
    private String senderHolder;
    @Column(name = "bic")
    private String bic;
    @Column(name = "bank_code")
    private String bankCode;
    @Column(name = "country_code")
    private String countryCode;

}
@MappedSuperclass
@Data
@Accessors(chain = true)
public abstract class BasicEntity {
  @Column(name = "created_at")
  @CreationTimestamp
  private LocalDateTime createdAt;
  @Column(name = "updated_at")
  @UpdateTimestamp
  private LocalDateTime updatedAt;
}

and this is my table

create table sofort_payment
(
    id                          UUID         NOT NULL
        constraint sofort_payment_pkey primary key,
    referenced_transaction      UUID references transaction(id) NOT NULL,
    status                      varchar(255) NOT NULL,
      reason                      text,
    external_payment_id         varchar(255) NOT NULL,
    currency                    varchar(255) NOT NULL,
    amount                      numeric(19, 2) NOT NULL,
      iban                        varchar(255) NOT NULL,
      back_name                   varchar(255) NOT NULL,
    sender_holder               varchar(255) NOT NULL,
    bic                         varchar(255) NOT NULL,
    bank_code                   varchar(255) NOT NULL,
    country_code                varchar(255) NOT NULL,
    created_at                  timestamp without time zone NOT NULL,
    updated_at                  timestamp without time zone NOT NULL
);

sofortPaymentRepository.save(sofortPaymentEntity.builder()
                                                 .id(sofortPaymentEntity.getId())
                                                 .referencedTransaction(sofortPaymentEntity.getReferencedTransaction())
                                                 .externalPaymentId(statusNotification.getTransId())
                                                 .amount(BigDecimal.valueOf(paymentTransactionDetails.getAmount()))
                                                 .currency(paymentTransactionDetails.getCurrencyCode())
                                                 .reason(paymentTransactionDetails.getStatusReason().toString())
                                                 .bankCode(paymentTransactionDetails.getSender().getBankCode())
                                                 .bankName(paymentTransactionDetails.getSender().getBankName())
                                                 .bic(paymentTransactionDetails.getSender().getBic())
                                                 .iban(paymentTransactionDetails.getSender().getIban())
                                                 .countryCode(paymentTransactionDetails.getSender().getCountryCode())
                                                 .senderHolder(paymentTransactionDetails.getSender().getHolder())
                                                 .status(paymentTransactionDetails.getStatus().toString()).build());
Generic exception caught: 

org.springframework.dao.DataIntegrityViolationException:不能执行语句;SQL[N/A];约束[created_at];嵌套异常是org.hibernate.exception.constraintViolationException:在org.springframework.orm.jpa.vendor.hibernatejpaction.converthibernateAccessException(Hibernatejpaction.java:296)在org.springframework.orm.jpa.vendor.hibernatejpaction.java.translateExceptionIfprobley(Hibernatejpaction.java:253)在manager.java:746)在org.springframework.transaction.support.AbstractPlatformTransactionManager.Commit(AbstractPlatformTransactionManager.java:714)在org.springframework.transaction.interceptor.transaction.Transaction.Transaction.Transaction.TransactionSupport.CommittTransactionAfterRetting(TransactionSupport.java:534)在interceptor.transactioninterceptor.invoke(transactioninterceptor.java:98)在org.springframework.aop.framework.reflectiveMethodInvocation.proce(reflectiveMethodInvocation.java:186)在org.springframework.dao.support.persistenceExceptionTranslationInterceptor.invoke(persistenceExceptionTranslationInterceptor.java:139)在(crudmethodMetadatapostProcessor.java:138)在org.springframework.aop.framework.reflectiveMethodInvocation.java:186)在org.springframework.aop.interceptor.exposeInvocation.java:186)在org.springframework.aop.interceptor.exposeInvocation.invoke(exposeInvocation.java:93),在ndingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)在org.springframework.aop.framework.ReflectiveMethodInvocation.proce(ReflectiveMethodInvocation.java:186)

共有1个答案

贺季
2023-03-14

在创建表时给出默认的时间戳值,如

created_at timestamp without time zone default CURRENT_TIMESTAMP NOT NULL

或者为特定于数据库提供程序的@Column注释设置columnDefinition属性,并使用@Temporal。ex PSQL:

@Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date createdAt
 类似资料:
  • 它直接在我的网站上找到0个结果,而不是做echo$行有什么想法吗?我希望它从我的数据库(phpmyadmin)中提取,数据库名称是events\u table。

  • 首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的

  • 我正在将数据插入MySQL数据库,但在执行insert语句时出错: 语句的结果集不能为null。执行。 虽然如果我检查数据库表,我发现值已经成功插入。这是令人困惑的。 代码片段

  • 下面给出一个例子来演示一下如何使用JDBC来执行各种SQL语句,其中包括DDL语句(建立数据库和数据表)、INSERT语句和SELECT语句。 1.程序分析说明 本程序首先创建一个mydb数据库(如果存在就不创建),然后创建一个用于保存图书信息的表t_books(如果存在,删除后再创建),最后向表中插入两条记录,并查询和显示其中的第2条记录。 2.代码编写 本程序使用了Statement接口的ex

  • 问题内容: 我正在我的VirtualBoxed Ubuntu 11.4上测试此Go代码 Ubuntu可以访问我所有的4个内核。我通过同时运行几个可执行文件和系统监视器来检查这一点。但是,当我尝试运行此代码时,它仅使用一个内核,并且没有从并行处理中获得任何收益。 我做错了什么? 问题答案: 您可能需要查看Go FAQ 的Concurrency部分,特别是以下两个问题,并确定哪个(如果不是两个)适用于

  • 问题内容: 大家好,我想执行我的SQL语句,但是我在synatx上遇到麻烦,有人可以帮助我了解我做错了什么吗? 谢谢,阿什。 问题答案: 您需要解决的最重要的事情是使用查询参数,而不是动态地构建字符串。这将提高性能,维护和安全性。 此外,您想使用较新的强类型ADO.Net对象。确保为添加使用指令。 注意此代码中的语句。完成连接后,他们将 确保 您的连接已关闭。这很重要,因为数据库连接是有限且不受管