J'ai une classe Entitly simple avec les champs @EmbeddedId
(Integer
et String
dans une classe séparée). Et j'utilise les données de printemps (org.springframework.data.jpa.repository.JpaRepository
) pour accéder à la base de données (MySql), avec l'Id normal les requêtes fonctionnent bien, à la fois les générées par Spring et celles que j'ai écrites. Avec le EmbeddedId
je n'ai pas réussi à créer la requête correcte. Ce que je veux faire est de sélectionner tout l'id (un des champs de embeddedId pour lequel une condition se produit) Voici quelques exemples de code, peut-être que quelqu'un aura une idée pour le résoudre.
La classe d'entité:Utilisation de @EmbeddedId avec JpaRepository
@Entity
@Table(name="table_name")
public class EntityClass {
@EmbeddedId
private EmbeddedIdClass id;
private String someField;
//rest of implemetation
}
la classe EmbeddedId:
@Embeddable
public class EmbeddedIdClass implements Serializable {
public EmbeddedIdClass(Long id, String language) {
super();
this.id = id;
this.language = language;
}
public UserAdTextId() {}
@Column(name="ad_id", nullable=false)
private Integer id;
@Column(name="language_code", nullable=false)
private String language;
//rest of implemetation
}
et le dépôt:
@Transactional(readOnly=true)
public interface MyRepository extends JpaRepository<EntityClass, EmbeddedIdClass> {
@Query("select distinct ad_id from EntityClass where userId = :userId and (/*here the conditions*/)")
public Page<Integer> findUserAdsWithSearchString(@Param("userId") Integer userId, @Param("searchString") String searchString, Pageable page);
//rest of implemetation
}
Je ne trouve pas de documentation comment créer des méthodes pour soutenir la @EmbeddedId, j'essayais de nombreux noms de méthodes différentes, mais j'obtiens toujours des exceptions de l'analyseur de méthode.
C'est vrai, je dois utiliser les noms des champs et les parcourir, mais je reçois la sortie sql avec le nombre de seelct (distinct ...) Où est le nombre de? le type de retour est Page ou Liste (J'essayais les deux ... –
Mat
La réponse est ok, un autre problème que j'avais était paginable ... il semble que les requêtes avec distinct ou par groupe ne peuvent pas gérer Pageable ... pitié :( – Mat