我有以下方法:
List<BinValue> binValues = Arrays
.stream(data)
...
.collect(Collectors.toList());
binValueRepo.deleteByStatId(databaseGlobals.getMarriedStat().getId());
// for(BinValue binValue : binValues) {
// binValueRepo.save(binValue);
// }
binValueRepo.save(binValues);
首先,它准备一个BinValue
实体列表,然后尝试将其保存到存储库。
问题是:如果我尝试保存整个列表,则会出现以下错误:
org.springframework.dao.CannotAcquireLockException: error performing isolated work; SQL [n/a];...
LockAcquisitionException: error performing isolated work
org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
如果我一个人这样做,那么一切都有效(但很慢)。
要填充BinValue,我使用以下代码:
BinValue ans = new BinValue();
ans.setBin(bin);
ans.setRegion(region);
...
即。我没有填写主要关键字段。
通过以下方式定义:
@Entity
@Table(name = "bin_values")
@NoArgsConstructor
@AllArgsConstructor
public class BinValue {
@Id
@Column(name="id")
@GeneratedValue(generator="sqlite")
@TableGenerator(name="sqlite", table="sqlite_sequence",
pkColumnName="name", valueColumnName="seq",
pkColumnValue="bin_values")
@Getter
@Setter
private long id;
答案 0 :(得分:0)
显然,将最大连接数设置为1以解决此问题
@Bean
public DataSource dataSource() {
BasicDataSource ans = new BasicDataSource();
ans.setDriverClassName("org.sqlite.JDBC");
ans.setUrl("jdbc:sqlite:" + sqliteDatabaseFile().getAbsolutePath());
ans.setMaxTotal(1);
return ans;
}