2017-09-17 1 views
0

J'ai un ORM JPA Spring Data implémenté à partir du générateur JHipster avec le cache de 2ème niveau utilisant EHCache. (Je pense)Spring Data JPA, findOne null, @Query renvoie l'enregistrement

J'ai copié les données d'une table de base de données à l'autre (directement dans SQL en utilisant la voie de migration):

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

et a créé une nouvelle entité:

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

Lobby lobby = lobbyRepository.findOne(id) (retours null même si l'enregistrement est dans la base de données).

Cependant, si je crée une requête:

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

Renvoie l'enregistrement?

Cela peut ne pas être le cas mais je ne peux pas penser à n'importe quoi d'autre qui pourrait causer ceci. Si je crée de nouveaux enregistrements de lobby, ils sont renvoyés correctement par findOne

De même, findAll retourne tous les enregistrements correctement.

Répondre

1

Je ne vois pas l'entité comme pouvant être mise en cache ici (pas d'annotation à ce sujet), donc à moins que la requête ne soit cacheable, le cache ne peut pas être impliqué ici. Et puis, même si c'était le cas, pour être impliqué, vous auriez dû interroger la table, cela retournerait alors null et ensuite ajouter l'entrée via SQL pour enfin interroger à nouveau et obtenir le résultat du cache (null).

Mais cela n'est pas possible puisque vous remplissez la table lors de la création.

La ligne de fond, sauf si vous avez un niveau plus élevé de cache, ce n'est pas le cache. Et je n'ai pas assez d'informations pour vous dire ce que c'est.

+0

Cela a du sens, après avoir examiné je serais d'accord. Je trouve tous les enregistrements si je fais un 'lobbyRepository.findAll()', mais si je fais 'lobbyRepository.findOne (..)' renvoie null. –

0

J'ai trouvé le problème! Lorsque j'ai copié la table, j'ai eu une contrainte @NotNull sur l'une des relations de clé étrangère, mais je n'ai pas créé d'enregistrements correspondants.