如何在Spring data JPA中获取结果集中的列名

Nik*_*aya 3 java spring hibernate jpa

我有列出用户的简单程序。我用于@NamedStoredProcedureQueries过程声明并EntityManager.createNamedStoredProcedureQuery用于StoredProcedureQuery.

它正确返回结果,但我需要列名称,以便我知道哪个值对应哪个列。

我的代码是这样的

实体类

@Entity
@NamedStoredProcedureQueries({ @NamedStoredProcedureQuery(name = 
    "sGetUserList", procedureName = "sGetUserList", parameters = { 
    @StoredProcedureParameter(mode = ParameterMode.IN, name = "user_id", type = 
    Integer.class) }) 
})
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;

    private String email;

    //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

自定义存储库

public interface UserRepositoryCustom {
    List<?> testProc() ;
}
Run Code Online (Sandbox Code Playgroud)

存储库

public interface UserRepository extends JpaRepository<User, Long>, 
UserRepositoryCustom{

}
Run Code Online (Sandbox Code Playgroud)

存储库实施

public class UserRepositoryImpl implements UserRepositoryCustom{

    @PersistenceContext
    EntityManager em;

    public List<Object> testProc() {

        StoredProcedureQuery q = em.createNamedStoredProcedureQuery("sGetUserList");
        q.setParameter("user_id", 1);
        List<Object> res = q.getResultList();

        return res;
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要带有列名称的结果。

小智 6

您可以在映射中获取列名称及其值。IE Map<'column-name', value>

Query query = entityManager.createNativeQuery("{call <<Your procedure>>}");
NativeQueryImpl nativeQuery = (NativeQueryImpl) query;
nativeQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String,Object>> result = nativeQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)

当您想要在 HTML 中使用列名称作为占位符(其中值将在运行时替换它)时,这将非常有用。