【发布时间】:2020-12-24 09:38:44
【问题描述】:
我目前正在开发 Spring Boot Hibernate。
我需要在 mySql 数据库中保存一个对象列表, 我读到了使用 saveAll() 和 foreach save() 保存之间的区别,我可以得出结论 saveAll() 要快得多。但是,如果出现异常情况,例如 UK 违规,整个过程会回滚,并且不会保存任何对象。
更简单地说:我想在一个事务中保存一个对象列表,如果违反任何约束,忽略它并保存其余部分。
这是我的实体:
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();
}
谢谢你:)
【问题讨论】:
标签: spring-boot hibernate jpa