【问题标题】:JpaSystemException: could not extract ResultSetJpaSystemException:无法提取结果集
【发布时间】:2020-11-04 09:17:54
【问题描述】:

我在 Spring 启动应用程序中的 .save() 调用中遇到以下异常。我正在运行 Spring boot 2.2.5.RELEASE

堆栈跟踪太大,无法包含在此处,因此我已将其分享到 this link

代码如下:

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 的多个其他答案,但没有任何关于此错误的信息。我最近升级了我的弹簧靴,从那时起这个错误就一直出现。此外,我能够读/写 Spring 会话表,所以我假设这不是配置问题?

我做错了什么?

【问题讨论】:

  • 如果你决定明确实现hashCode(),我想你应该对equals(Object other)Search类)做同样的事情。您能否提供一个完整的堆栈跟踪。你看到this了吗?
  • 我猜你是对的。但我不相信这可能是导致这个问题的原因。是的,我确实看过那个答案,但在那里找不到解决方案。那个有org.hibernate.exception.SQLGrammarException,这不是我所拥有的,所以这是一个不同的问题。还使用完整的堆栈跟踪更新了问题。
  • 我找到了答案。我会在一秒钟内发布它,这样它可能会帮助遇到同样问题的其他人。

标签: java spring-boot hibernate jpa spring-data-jpa


【解决方案1】:

引发此堆栈错误的原因是默认情况下我的休眠事务设置为readOnly = true。我从中调用 .save() 方法的类有注释 @Transactional,而该方法没有任何注释。所以 .save() 会尝试改变模型并且会失败。所以我决定为我的方法添加@Transactional(readOnly=false),因为它正在写入数据库,并且似乎已经解决了这个问题。

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多