Spring 数据 JPA,findOne 为空,@Query returns 记录
Spring Data JPA, findOne null, @Query returns record
我有一个 Spring 数据 JPA ORM 从 JHipster 生成器实现,使用 EHCache 二级缓存。 (我认为)
我已经将数据从一个数据库 table 复制到另一个数据库(使用 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)
(returns null,即使记录在数据库中)。
但是,如果我创建一个查询:
@Query("SELECT lobby FROM Lobby lobby WHERE id = ?1)
public getOneById(Long id)
Returns记录?
这可能不是这种情况,但我想不出任何其他可能导致这种情况的原因。如果我创建新的大厅记录,它们会被 findOne
正确返回
也findAll
returns全部记录正确
我在这里看不到实体是可缓存的(没有关于那个的注释),所以除非查询是可缓存的,否则这里不能涉及缓存。
然后,即使涉及,您也需要查询 table,然后 return 为空,然后通过 SQL 添加条目最后再次查询并从缓存中获取结果(null)。
但这不可能,因为您在创建时正在填充 table。
底线,除非你有更高级别的缓存,否则它不是缓存。我没有足够的信息来告诉你它是什么。
我找到问题了!当我复制 table 时,我对其中一个外键关系有 @NotNull
约束,但没有创建相应的记录。
我有一个 Spring 数据 JPA ORM 从 JHipster 生成器实现,使用 EHCache 二级缓存。 (我认为)
我已经将数据从一个数据库 table 复制到另一个数据库(使用 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)
(returns null,即使记录在数据库中)。
但是,如果我创建一个查询:
@Query("SELECT lobby FROM Lobby lobby WHERE id = ?1)
public getOneById(Long id)
Returns记录?
这可能不是这种情况,但我想不出任何其他可能导致这种情况的原因。如果我创建新的大厅记录,它们会被 findOne
也findAll
returns全部记录正确
我在这里看不到实体是可缓存的(没有关于那个的注释),所以除非查询是可缓存的,否则这里不能涉及缓存。
然后,即使涉及,您也需要查询 table,然后 return 为空,然后通过 SQL 添加条目最后再次查询并从缓存中获取结果(null)。
但这不可能,因为您在创建时正在填充 table。
底线,除非你有更高级别的缓存,否则它不是缓存。我没有足够的信息来告诉你它是什么。
我找到问题了!当我复制 table 时,我对其中一个外键关系有 @NotNull
约束,但没有创建相应的记录。