java - JpaSystemException:无法提取结果集
问题描述
我.save()
在 Spring Boot 应用程序中的调用中遇到以下异常。我正在运行 Spring Boot 2.2.5.RELEASE
堆栈跟踪太大,无法包含在此处,因此我已在此链接中共享它。
这是代码:
Search search = new Search();
// ......Build Search Object here
searchRepository.save(search);
public interface searchRepository
extends BaseJpaRepository<Search, Long>, JpaSpecificationExecutor<Search> {
}
@Data
@Entity
@Table(name = "search")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Search extends AbstractAuditingEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Column(name = "externalId")
private Long externalId;
@NotNull
@Column(name = "search_term")
private String searchTerm;
@NotNull
@Column(name = "filters")
private String filters;
@NotNull
@Column(name = "results")
private Long results;
@Override
public int hashCode() {
return id != null ? id.hashCode() : IntegerUtils.ANSWER_TO_LIFE_THE_UNIVERSE_AND_EVERYTHING;
}
}
我已通过 IDE 上的调试模式确保所有@NotNull
字段都不包含 Null。我还在 application.yml 中添加了以下缺失值:
jpa:
hibernate:
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
在 stackoverflow 上查看了多个其他答案,但没有任何关于此错误的信息。我最近升级了我的弹簧靴,从那时起这个错误就一直出现。此外,我能够读/写弹簧会话表,所以我假设这不是配置问题?
我究竟做错了什么?
解决方案
引发此堆栈错误的原因是因为默认情况下我的休眠事务设置为readOnly = true
. 我从中调用 .save() 方法的类有注释@Transactional
,而该方法没有任何注释。所以 .save() 会尝试改变模型并且会失败。所以我决定@Transactional(readOnly=false)
使用我的方法,因为它正在写入数据库,它似乎已经解决了这个问题。
推荐阅读
- list - 布尔检查特定元素是否是方案中过滤列表的一部分
- android - React Native 运行时错误:未找到本机客户端。Bugsnag React Native 是否安装在您的本机代码项目中?
- django - DRF POST 图像和文本同时
- sql - 当数据不可用于输入表中的类别时,使用 hive 中的 group by 函数来获取聚合计数并获得零作为计数输出
- typescript - TypeORM:多对多自定义列名
- google-apps-script - 如何使用另一张工作表中的新数据更新现有行?
- angular - 使用ngrx store vs @Input 进行通信之间的简单通信
- php - Laravel:如何将变量传递给 JavaScript 文件?
- android - Xamarin Android 10 安装 APK - 找不到处理 Intent 的活动
- python - 标记信号的最快方法?