我有100个对象,我想将其保存到数据库。
@Service
public class TestService {
private final TestDao testDao;
public TestService(TestDao testDao) {
this.testDao = testDao;
}
@Transactional
public void saveTest() {
for (int i = 0; i < 100; i++) {
Test test = new Test();
if (i == 10 || i == 20) {
test.setName("123");
} else {
test.setName(UUID.randomUUID().toString());
}
testDao.save(test);
}
}
}
我对“名称”列有uniq约束,如果我尝试用某个名称保存2个对象,就会出现异常。
我需要保存99个对象(唯一的名称),并跳过一个重复的名称对象。但是如果我尝试插入dublicate,我会得到一个异常,事务回滚所有对象。我改变我的刀savee()方法:
@Slf4j
@Repository
public class TestDao {
@PersistenceContext
private EntityManager entityManager;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void save(Test test) {
entityManager.persist(test);
}
}
Propagation.REQUIRES_NEW - 在每个对象上启动内部事务,并且仅对rollbak对象进行配音。它很好。但是在日志打印中,此异常堆栈跟踪/如何隐藏此堆栈?
问题内容: 我正在使用TestNG 6.9.9来构建回归测试环境。但是遇到使用JUnit时从未遇到过的问题。在我看来,当每个测试用例完成时,如果测试方法在与调用方法相同的事务上下文中运行,则默认情况下将自动回滚每个数据的更改。但这似乎不是事实,而且我无法找出我的代码中是否有任何错误。请帮帮我。pom.xml中的属性,指示框架的版本 显然,它们都是最新的。 我的测试课: 创建一个实体实例,然后调用c
输入=堆栈数 但是你只能弹出输入,你不能推到它。输出也是另一个堆栈,你可以返回并推到它,但不能弹出 所以如果 由于您无法在中返回到
我已经阅读了Spring@Transactional-Isolation,propagation中的指令 但是我不明白我解释的这个特性是如何产生的:我有一个异步方法,像这样 此方法(setFlag)在调用异步方法之前通过1L调用一次 并且在异步方法中的所有操作结束时传递零 但是,如果异步方法因某些问题而失败,则catch分支中的调用将失败,因为 且标志保持为1。 所以,我希望我是清楚的,但是...
我在尝试资源方面有问题,我只是想确认一下。如果我需要对异常做出反应,并且我仍然需要catch块中的资源,我可以使用它吗?示例如下: 我担心在这种情况下,我仍然注定要使用旧的try-catch-最终,即使根据甲骨文留档-“在try-with-资源语句中,任何一抓或最终块都是在声明的资源被关闭后运行的。”
问题内容: 我在尝试资源时遇到问题,我只是想确定一下。如果我需要对异常做出反应并且仍然需要catch块中的资源,可以使用它吗?给出的示例是这样的: 我担心即使在oracle文档中,我仍然注定要在这种情况下最终使用旧的try-catch-finally-“在try-with- resources语句中捕获并最终阻止,任何catch或finally块都在资源之后运行宣布已关闭。” 问题答案: 根据语言
我们为JPA配置了Spring数据。服务事务方法不会因错误而回滚(例如,DB ConstraintViolationException)。 我能找到的最接近的是这个(事务不回滚)Spring-data、JTA、JPA、Wildfly10但是我们没有任何XML配置,我们所有的配置都是基于Java的。 本质上,服务方法如下所示:不捕获错误,抛出所有内容。