Tengo una clase simple de Entitly con los campos @EmbeddedId
(Integer
y String
en clases separadas). Y uso los datos de Spring (org.springframework.data.jpa.repository.JpaRepository
) para acceder a la base de datos (MySql), con el Id normal las consultas funcionan bien, tanto las generadas por Spring como las que escribí yo mismo. Con el EmbeddedId
no logré crear la consulta correcta. Lo que quiero hacer es seleccionar todo el ID (uno de los campos de embeddedId para el que se produce alguna condición). Aquí tiene algunas muestras de código, tal vez alguien tendrá una idea de cómo resolverlo.
La clase de entidad:Usando @EmbeddedId con JpaRepository
@Entity
@Table(name="table_name")
public class EntityClass {
@EmbeddedId
private EmbeddedIdClass id;
private String someField;
//rest of implemetation
}
la clase 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
}
y el repositorio:
@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
}
no he encontrado ninguna documentación cómo crear los métodos para apoyar la @EmbeddedId, estaba probando muchos nombres de métodos diferentes, pero siempre recibo excepciones del analizador del método ...
Es correcto, tengo que usar los nombres de campo y navegar a través de ellos, sin embargo, obtengo el resultado sql con cuenta seelct (distinct ...) ¿De dónde viene el conteo? el tipo de devolución es la página o la lista (estaba intentando ... –
Mat
La respuesta es correcta, otro problema que tenía era una paginabilidad ... parece que las consultas con distinct o group by cant manejan Pageable ... pena :( – Mat