Я использую весеннюю загрузку вместе с JPA. Мне нужно вызвать хранимую процедуру из Ms Sql, используя класс сущностей с помощью запроса именованных хранимых процедур. Хранимая процедура вернет некоторые дополнительные поля, которых нет в классе сущности. в таком случае как мне получить доступ к этим полям?
И в другом сценарии SP не будет возвращать некоторые поля, которые обозначены как «not-null = true» в конфигурации объекта. В этом случае запрос именованных хранимых процедур выдаст исключение, сообщив, что имя столбца «nameA» недопустимо. Есть ли возможность решить эти 2 проблемы.
Класс сущности
@Entity
@Table(name = "tbl_ClassA")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "getData",
procedureName = "sp_getHistory",
resultClasses = ClassA.class
)
})
public class ClassA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "search_type", nullable = false)
private String searchType;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "age")
private String age;
}
Репозиторий
@Repository("classARepository")
public interface ClassARepository extends JpaRepository<ClassA, Long>,CustomRepository {
}
Пользовательский интерфейс репозитория
public interface CustomRepository {
List<ClassA> getHistory();
}
Пользовательский Реализация класса репозитория
@Scope("prototype")
public class CustomRepositoryImpl implements CustomRepository {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<ClassA> getHistory() {
List<ClassA> listA = null;
StoredProcedureQuery query =
entityManager.createNamedStoredProcedureQuery("getData");
listA = query.getResultList();
return listA;
}
}
Хранимая процедура
USE [DB_A]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_getHistory]
AS
BEGIN
SELECT id, first_name, last_name, age, CONCAT(first_name, ' ', last_name) as full_name from
tbl_ClassA
END
Видно, что в результате SP исключается search_type и добавляется полное_имя.