2017-09-17 145 views
0

我有一個使用EHCache從JHipster Generator w/2nd級緩存實現的Spring Data JPA ORM。 (我認爲)Spring Data 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

我發現問題了!當我複製表時,我對某個外鍵關係有一個約束,但沒有創建相應的記錄。