JPA - @Query ou @EntityGraph
Bonjour,
J'utilise Spring Data JPA dans mon application
J'ai une entité qui contient une List<Interlocuteur> et une List<Lieu>
Via la méthode FinAll dans mon Repository, Je souhaite charger les deux listes
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
@Entity
@Table(name="OPERATION")
@NamedEntityGraph(name="operation.interlocuteur",attributeNodes = @NamedAttributeNode("interlocuteurs") )
@NamedEntityGraph(name="operation.lieu",attributeNodes = @NamedAttributeNode("lieux") )
public class Operation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="OPERATION_ID")
private Long id;
private String titre;
@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name="OPERATION_ID")
private List<Interlocuteur> interlocuteurs = new ArrayList<>() ;
@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name="OPERATION_ID")
private List<Lieu> lieux = new ArrayList<>();
} |
.. J'ai essayé de faire référence aux deux entityGraph dans mon Repository
Mais j'ai une erreur de compilation si j'utilise deux fois l'annotation @EntityGraph
Code:
1 2 3 4 5 6 7
| @Repository
public interface OperationRepositoryInterface extends PagingAndSortingRepository<Operation,Long> {
@EntityGraph(value= "operation.interlocuteur", type= EntityGraph.EntityGraphType.FETCH)
@EntityGraph(value= "operation.lieu", type= EntityGraph.EntityGraphType.FETCH)
Iterable<Operation> findAll();
} |
Y-a-t-il une possibilité de faire un findAll() qui charge la totalité de données de mon Entity en utilisant @EntityGraph?
Si ce n'est pas possible, je sais qu'il y a la possibilité de l'annotation @Query dans mon Repository.... même si je trouve la solution plus complexe
Mais je n'arrive pas à réaliser la requête JPQL qui permet d'explorer toute les données
Exemple qui fonctionne :
Code:
1 2 3 4 5 6
|
@Query("SELECT o FROM Operation o "
+ "INNER JOIN FETCH o.interlocuteurs "
+ "WHERE o.id=?1")
Optional<Operation> findById(Long id); |
Exemple qui ne fonctionne pas :
Code:
1 2 3 4 5 6
|
@Query("SELECT o FROM Operation o "
+ "INNER JOIN FETCH o.interlocuteurs "
+ "INNER JOIN FETCH o.lieux "
+ "WHERE o.id=?1")
Optional<Operation> findById(Long id); |
D'avance merci pour vos éclaircissements