Spring Data JPA,findOne为null,@ Query返回记录

时间:2017-09-17 20:43:50

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

我有一个使用EHCache从JHipster Generator和二级缓存实现的Spring Data JPA ORM。 (我认为)

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

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正确返回所有记录。

2 个答案:

答案 0 :(得分:1)

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

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

但是这是不可能的,因为你在创作时填写了表格。

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

答案 1 :(得分:1)

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