У меня есть простой класс Entitly с @EmbeddedId
(Integer
и String
поля в отдельном классе). И я использую данные Spring (org.springframework.data.jpa.repository.JpaRepository
) для доступа к базе данных (MySql), с обычным идентификатором запросы работают нормально, как сгенерированные Spring, так и те, что написал сам. С EmbeddedId
мне не удалось создать правильный запрос. Что я хочу сделать, так это выбрать все идентификаторы (одно из полей встроенного идентификатора, для которого возникает какое-то условие). Здесь у вас есть несколько примеров кода, возможно, у кого-то будет идея, как это решить.
Класс сущности:
@Entity
@Table(name="table_name")
public class EntityClass {
@EmbeddedId
private EmbeddedIdClass id;
private String someField;
//rest of implemetation
}
класс 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
}
и репозиторий:
@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
}
Я не нашел никакой документации, как создавать методы для поддержки @EmbeddedId, я пробовал много разных имен методов, но всегда получить исключения из парсера метода..