JPA – Как выполнить запрос с использованием спецификации и @EmbeddedId?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JPA – Как выполнить запрос с использованием спецификации и @EmbeddedId?

Сообщение Anonymous »

Я использую запрос JPA, который использует спецификацию для извлечения сущностей. Когда я выполняю запрос, я получаю сообщение об ошибке:


org.springframework.data.mapping.PropertyReferenceException: имя свойства не найдено для введите Задача!


Я просмотрел ответы на похожие вопросы, которые задавались на этом сайте ранее, и попытался смоделировать свой код следовать рекомендованным шаблонам, но код по-прежнему дает сбой.

Когда я просматриваю код с помощью отладчика, расширенный путь в построителе критериев возвращает встроенный ID класса, но когда спецификация фактически используется в запросе, создается впечатление, что атрибут применяется к базовому классу сущности.

Я упускаю что-то очевидное? p>

Вот класс сущности:

Код: Выделить всё

@Entity
@Table(name = "TASKS")
public class Task implements Serializable {

@EmbeddedId
private TaskId id;

...more attributes, getters and setters
}
Вот класс сущности встроенного идентификатора:

Код: Выделить всё

@Embeddable
public class TaskId implements Serializable {

@Column(name = "NAME", length = 100)
private String name;

...more attributes, getters and setters
}
Вот построитель спецификаций, который соответствует встроенному атрибуту «имя» идентификатора:

Код: Выделить всё

public class HasTaskNameSpec {

private HasTaskNameSpec() {
}

public static Specification equals(String name) {
return (root, query, criteriaBuilder) -> {
return criteriaBuilder.equal(root.get("id").get("name"), taskName);
};
}

}
Запрос выполняется в репозитории следующим образом:

Код: Выделить всё

List results = taskRepository.findAll(HasTaskNameSpec.equals("foo"));
Сам репозиторий очень простой:

Код: Выделить всё

public interface TaskRepository extends JpaRepository, JpaSpecificationExecutor {
List findByIdName(String name);
Page findByIdName(String name, Pageable page);
}
** EDIT добавил методы в репозиторий, как было предложено ниже **

Подробнее здесь: https://stackoverflow.com/questions/478 ... embeddedid
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»