2017-09-17 5 views
0

EHCache를 사용하여 JHipster Generator w/second 레벨 캐시에서 구현 된 스프링 데이터 JPA ORM을 보유하고 있습니다. (내 생각)스프링 데이터 JPA, findOne null, @Query가 레코드를 반환합니다.

나는 (이동 경로 사용하여 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은 모든 레코드를 올바르게 반환합니다.

답변

1

엔티티가 여기에 캐시 가능하다고 표시되지 않습니다 (이에 대한 주석이 없습니다). 따라서 쿼리가 캐시 가능하지 않으면 캐시를 여기에 포함시킬 수 없습니다.

그리고 관련이 있다고하더라도 테이블을 쿼리 한 다음 null을 반환 한 다음 SQL을 통해 항목을 추가하여 마지막으로 다시 쿼리하고 캐시에서 결과를 가져옵니다 (null).

하지만 작성시 테이블을 채우고 있기 때문에 불가능합니다.

결론 상위 레벨이 아니라면 캐시가 아닙니다. 그리고 나는 그것이 무엇인지 말할 수있는 충분한 정보가 없습니다.

+0

검토해 보면 동의해야 할 것 같습니다. 'lobbyRepository.findAll()'을하면 모든 레코드를 찾지 만,'lobbyRepository.findOne (..)'을 수행하면 null을 반환합니다. –

0

문제점을 발견했습니다. 표를 복사 할 때 외래 키 관계 중 하나에 @NotNull 제약 조건이 있지만 해당 레코드를 만들지 않았습니다.