Мои сущности связаны друг с другом, но таким образом, что я не мог использовать JPQL.Я был вынужден использовать родной SQL.Теперь я хочу отобразить эти результаты в ValueObject.Чтобы было понятно, я не хочу получать список массивов объектов (List).У меня есть 6 объектов, из которых мне нужно только несколько столбцов.Кто-нибудь может дать мне пример того, как реализовать такое отображение из собственного запроса?
Я пытался создать экземпляр репозитория, но получая ошибку, как показано ниже, я пытался с аннотацией @Repository, помещая чуть выше классу,Это не сработало.Потом я тоже попробовал с @Service.Не повезло.
В чем может быть причина?Поскольку мы не можем использовать @Entity, потому что для этого потребуется @Id, которого у нас не может быть, так как это не фактический класс сущности.Ниже приведен фактический класс DTO, в котором мы определили запрос:
@SqlResultSetMapping(
name = "findAllDataMapping",
classes = @ConstructorResult(
targetClass = MyVO.class,
columns = {
@ColumnResult(name = "userFirstName"),
@ColumnResult(name = "userLastName"),
@ColumnResult(name = "id"),
@ColumnResult(name = "packageName")
}
)
)
@NamedNativeQuery(name = "findAllDataMapping",
resultClass = MyVO.class,
query = "SELECT u.first_name as userFirstName, " +
" u.last_name as userLastName, " +
" i.id as id, " +
" s.title as packageName, " +
"FROM " +
" invoice as i " +
"JOIN user as u on i.user_id=u.id " +
"LEFT JOIN subscription_package as s on i.subscription_package_id=s.id " +
"where u.param1=:param1 and i.param2=:param2" +
)
public class MyVO {
private String userFirstName;
private String userLastName;
private Long id;
private String packageName;
//Default constructor
public MyVO () {}
//Parameterised constructor
public MyVO (String userFName, String userLName, Long id, String packageName) {
this.userFirstName = userFName;
this.userLastName = userLName;
this.id = id;
this.packageName = packageName;
}
// getters & setters
}
В моем модуле jpa-репозитория:
//MyRepository interface
@Repository
public interface MyRepository extends JpaRepository<MyVO, Long> {
@Query(nativeQuery = true)
List<MyVO> findAllOfMyVO(@Param("param1") String param1, @Param("param2") String param2);
}
Экземпляр MyVO должен автоматически быть создан.А в основном классе, то есть в классе обслуживания, я должен иметь возможность выполнить этот запрос и получить результат в виде списка, вызвав метод репозитория.
Причина:
java.lang.IllegalArgumentException: не управляемый тип: class MyVO
Я попытался создать экземпляр репозитория, но получил ошибку, как показано ниже
Я попытался с аннотацией @Repository, поместив чуть выше в класс.Это не сработало.Потом я тоже попробовал с @Service.Не повезло.
В чем может быть причина?Поскольку мы не можем использовать @Entity, потому что для этого потребуется @Id, которого у нас не может быть, так как это не фактический класс сущности