我目前正在做一个spring boot冬眠。
我需要在mySql数据库中保存一个对象列表,我了解了使用saveAll()和foreach save()进行保存的区别,我可以得出这样的结论:saveAll()要快得多。然而,在例外情况下,例如UK违反,整个进程回滚,并且没有对象将被保存。
更简单地说:我想在一个事务中保存一个object列表,如果有任何约束违反,忽略它并保存其余的。
这是我的实体:
package com.entity;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@Transactional
public class Page {
@Id
@GeneratedValue(generator = "page_sequence-generator")
@GenericGenerator(
name = "page_sequence-generator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "page_sequence"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "1")
}
)
private long id;
@Column(nullable = false, unique = true)
private String url;
private boolean isPageConsumed;
public Page() {
}
public Page(String url, boolean isPageConsumed) {
this.url = url;
this.isPageConsumed = isPageConsumed;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public boolean isPageConsumed() {
return isPageConsumed;
}
public void setPageConsumed(boolean pageConsumed) {
isPageConsumed = pageConsumed;
}
@Override
public String toString() {
return "Page{" +
"id=" + id +
", url='" + url + '\'' +
", isPageConsumed=" + isPageConsumed +
'}';
}
}
这是我的存储库:
@Repository
public interface PageRepository extends CrudRepository<Page, String> {
@Query(value = "SELECT p FROM Page p where p.isPageConsumed = '0'")
public Page findFirstPage();
}
谢谢:)
您可以在调用saveAll()
的controller方法上使用spring的@transactional(NorolBackFor={someException.class})
。
问题内容: 创建Elasticsearch Client时,出现异常java.lang.NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava / util / concurrent / Executor; 经过一些查找之后,像Guava-18这样的接缝将在运行时被旧版本覆盖,而
我在Postgres db中有一个没有主键的表。我想更新两列的组合是否具有相同的值。 没有主键我找不到任何东西。另外,col1和col2的组合是唯一的。col1可以有多行,值相同,col2可以有多行,但一起不能。 我的桌子是这样的: 我不能对这两列中的任何一列都有唯一的约束,但将索引以组合方式添加在一起的工作原理如下: 但是现在,如何处理插入。什么应该是条件,因为我们不能有2列,所以回到同一个问题
既然有一个,那么当使用时,有没有办法刷新更新的实体? 我试图按批处理更新实体。 真的会有很大的帮助! 非常感谢。
问题内容: 创建Elasticsearch Client时,出现异常java.lang.NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava / util / concurrent / Executor; 经过一些查找之后,像Guava-18这样的接缝在运行时会被旧版本覆盖,而
我正在从国家美术馆的在线目录中检索信息。由于目录的结构,我无法通过提取和跟踪条目之间的链接来导航。幸运的是,集合中的每个对象都有一个可预测的url。我希望我的爬行器通过生成开始URL来导航集合。 我试图通过实现这个线程中的解决方案来解决我的问题。不幸的是,这似乎打破了我蜘蛛的另一部分。错误日志显示我的网址正在成功生成,但它们没有被正确处理。如果我正确地解释了日志——我怀疑我没有——在重新定义允许我
在我的生产Cassandra集群(10个节点)中,我经常获得。因此,为了在我的本地开发环境(四个节点的Cassandra集群)中重现这个问题,我运行了我的代码,然后停止了两个CassandRadaemon。我有以下例外 线程“main”com.datastax.driver.core.exceptions.unavailableException:在com.datastax.driver.core