【问题标题】:Could not commit transaction Springboot to Mysql无法将事务 Springboot 提交到 Mysql
【发布时间】:2019-01-09 17:53:47
【问题描述】:

我做了一个这样的项目:https://grokonez.com/spring-framework/spring-boot/use-spring-jpa-mysql-spring-boot 并正常运行

但是当我在 MYSQL 中用 column(name="id") 更改 "id" 时。我在邮递员上测试时出错。

{
"timestamp": 1533183310810,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.transaction.UnexpectedRollbackException",
"message": "JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.",
"path": "/save"
}

我改变了一些客户类:

@Id
@Column(name="id")
private long id;

public Customer(long id , String firstName, String lastName){
    this.id=id;
    this.firstName=firstName;
    this.lastName=lastName;
}

在 WebController 类中,我用 id、名字、姓氏保存了一个客户

@RequestMapping("/save")
public String process(){
    repository.save(new Customer(1,"Jack", "Smith"));
    return "Done";
}

如何用 id 保存客户?

【问题讨论】:

  • 调试时,我看到错误:“ARJUNA016060: TransactionImple.enlistResource - 捕获:XAException.XAER_INVAL”
  • ConnectionImple.registerDatabase - ARJUNA017017:资源登记失败
  • 和 ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - SynchronizationImple 失败
  • 请将堆栈跟踪添加到您的问题中

标签: java mysql spring spring-boot mysql-workbench


【解决方案1】:

在那篇文章中,他们对 Id 列使用了GenerationType.AUTO 策略。这意味着 ID 列中的值将自动生成。因此,要保存记录,您无需显式提供 ID。

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

保存应该是这样的:

repository.save(new Customer("Jack", "Smith"));

这样做的好处是,您无需关心要分配的 ID 是否已分配给任何其他记录。 JPA 负责为所有新记录分配一个新 ID。

【讨论】:

  • 我知道这样。我想如果在数据库中,如果我有 6 行 id 为 1 - 6 并且我删除了 id=1 的行。当我插入我的数据库时,如果我使用 @GeneratedValue - id 现在是 7 但我想要 id = 1 。这就是我问这个问题的原因
  • 请在顶部的问题中提及这一点。
【解决方案2】:

您可能会收到此错误,因为您尝试插入的 id 可能已经在数据库中。如果您尝试插入具有不同 ID 的数据,您的代码将起作用。

虽然我们通常遵循上面共享的方法 (@GeneratedValue(strategy = GenerationType.AUTO))。

【讨论】:

  • 我知道这种方式。我想如果在数据库中,如果我有 6 行 id 为 1 - 6 并且我删除了 id=1 的行。当我插入我的数据库时,如果我使用 @GeneratedValue - id 现在是 7 但我想要 id = 1 。所以这就是我问这个问题的原因。
  • ID 不在我的数据库中,但是当我从 Spring boot 插入时。我有错误....
猜你喜欢
  • 1970-01-01
  • 2018-03-14
  • 2012-05-22
  • 1970-01-01
  • 2015-07-24
  • 2018-05-06
  • 1970-01-01
  • 2014-07-19
  • 2023-03-27
相关资源
最近更新 更多