【问题标题】:Spring Data JPA, findOne null, @Query returns recordSpring Data JPA,findOne null,@Query 返回记录
【发布时间】:2018-02-26 08:47:29
【问题描述】:

我有一个 Spring Data JPA ORM,它是使用 EHCache 从带有二级缓存的 JHipster 生成器实现的。 (我认为)

我已将数据从一个数据库表复制到另一个(直接在 SQL 中使用 flyway):

CREATE TABLE lobby (LIKE command_center INCLUDING ALL);
INSERT INTO lobby SELECT * FROM command_center;

并创建了一个新实体:

@Entity
@Table(name = "lobby")
@Document(indexName = "lobby")
public class Lobby {
      ...

Lobby lobby = lobbyRepository.findOne(id)(即使记录在数据库中也返回 null)。

但是,如果我创建一个查询:

@Query("SELECT lobby FROM Lobby lobby WHERE id = ?1)
public getOneById(Long id)

返回记录?

情况可能并非如此,但我想不出其他任何可能导致这种情况的原因。如果我创建新的大厅记录,findOne 会正确返回它们

同样findAll 正确返回所有记录。

【问题讨论】:

    标签: hibernate caching spring-data-jpa ehcache jhipster


    【解决方案1】:

    我不认为实体在这里是可缓存的(没有关于它的注释),所以除非查询是可缓存的,否则这里不能涉及缓存。

    然后,即使是,要参与,你也需要查询表,然后返回null,然后通过SQL添加条目,最终再次查询并从缓存中获取结果(null) .

    但这是不可能的,因为您在创建时填写表格。

    底线,除非您有更高级别的缓存,否则它不是缓存。而且我没有足够的信息告诉你它是什么。

    【讨论】:

    • 这是有道理的,在审查之后我不得不同意。如果我执行lobbyRepository.findAll(),我会找到所有记录,但如果我执行lobbyRepository.findOne(..),则返回 null。
    【解决方案2】:

    我发现了问题!当我复制表时,我在其中一个外键关系上有一个@NotNull 约束,但没有创建相应的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多