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

无法捕获TransactionSystemException

毋宪
2023-03-14

我有一个实体类Person,它通过JoinColumn连接到另一个实体Address,并且与Person有一个关系,Address实体在字段Country上有一个@NotNull注释。

简化代码如下:

@Entity
public class Person {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long PersonId; 

@Valid
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "address_id")
private Address address;
....
..some more fields, getters and setters etc..
...
}
@Entity
public class Address {

@Id
@GeneratedValue
private Long addressId;

private String street;

@NotEmpty(message = "Country should be there")
private String country;

....some more fields and getters and setters etc ....
}

我还有一个服务方法,即updateAddress,该方法最简单的形式如下:

public class Service {

@Transactional
public void updateAddress(Long personId, Address address) {
try {
Person original = findPersonById(personId);

...some validations etc ....

original.setAddress(address);            
personRepository.save(original);
} catch (ConstraintViolationException e) {

    }
}

我编写了一个小的单元测试,其中我试图使用updateAddress方法为一个没有预定义地址的人更新地址。

@Test
void checkUpdateAddress() {
Person person = new Person();
.....initiate some fields, except address ....
Long personId =personRepository.save(person);

Address address = new Address();
address.street("abcd");

service.updatePerson(personId, address);
//assertions etc
}

Transaction.TransactionSystemException:无法提交JPA事务;嵌套异常是javax.persistence.RollbackException:提交事务时出错

我已经尝试使用try/catch块,但仍然无法捕获此异常。

注意:我已经将代码简化到了最小的程度,如果有什么我忘记了或者我的问题不清楚,那么请询问。

Transaction.TransactionSystemException:无法提交JPA事务;嵌套异常是javax.persistence.RollbackException:提交事务时出错

共有1个答案

祁嘉瑞
2023-03-14

尝试捕获persistenceexception。此异常是包装的异常,不直接抛出。您可以使用getCare()方法提取包装的ConstraintViolationException

 类似资料:
  • 问题内容: 我正在尝试捕获“ android.database.sqlite.SQLiteException:错误代码5:数据库已锁定”异常,并带有: 由于某些原因,我仍然会收到错误消息,并且LogCat中没有显示“ caught”。我尝试捕获一般的“异常”,但这仍然行不通。怎么了? 更新, 我发现了这个问题,这确实很奇怪:由于某种原因,将goto10声明的db.insert()更改为db.ins

  • 问题内容: 尽管我在日志中看到了异常,但似乎无法捕获到约束违例异常。 实体 我正试图抓住它 -它永远不会到达捕获块。 当我使用 捕获(异常e) 我捕获到“ javax.transaction.RollbackException:ARJUNA016053:无法提交事务。” 这是错误日志: 我究竟做错了什么 ? 更新>> 我当前的代码是: 日志是 环境:PostgreSQL 9.2 JBoss AS

  • 我使用的是Spring Boot 2和Spring Boot starter数据jpa以及底层的MariaDB。 我有一个带有唯一键“用户名”的表。如果违反了此约束,我想捕获,但似乎Spring正在记录并且不会在记录后重新抛出(我最好的猜测)。被抛出。 我想在中捕获。 以下是几段代码片段: 堆栈跟踪:

  • 问题内容: 我的IDE给我该行的错误 我试着抓住,但是并没有使错误消失。有什么想法吗? 问题答案: 扩展了,所以您的IDE本身就有了更深的麻烦-也许库导入被搞砸了?

  • 我正在尝试捕获SocketTimeoutException,以便我的套接字保持活动状态,并且可以继续读取程序。不幸的是,无论我如何尝试捕获读取超时,我都无法捕获,因此应用程序关闭。

  • 问题内容: 是否可以在Java中构建一小段代码,以使假设的代码无法捕获? 想到的想法正在使用例如拦截器或面向方面的编程。 问题答案: 我没有试过,所以我不知道,如果JVM将限制这样的事情,但也许你可以编译代码抛出,但在运行时提供了一个类定义的其 未延伸的Throwable 。 更新: 没用 它生成一个验证错误: 更新2: 实际上,如果禁用字节码验证程序,则可以使它正常工作!() 更新3: 对于那些