在spring数据jpa中获取非表实体的数据
Posted
技术标签:
【中文标题】在spring数据jpa中获取非表实体的数据【英文标题】:Fetch data for non table entity in spring data jpa 【发布时间】:2018-03-20 07:14:38 【问题描述】:我有列 id、mname、firstname、lastname、age(5 列)的用户表 使用 spring data jpa 我只需要获取 id、firstname、age(只有 3 列)
userentity 在 user.java 之下
@Entity
@Table(name = "user")
public class User implements Serializable
private static final long serialVersionUID = -3009157732242241606L;
@Id
private long id;
@Column(name = "mname")
private String mName;
@Column(name = "firstname")
private String firstName;
@Column(name = "firstname")
private String firstName;
@Column(name = "lastname")
private String lastName;
@Column(name="age")
private int age;
//constructor with fileds
user2.java contains the fileds
private Long id;
private String firstname;
private int age;
//getter and setter
UserRepository.java
public interface UserRepository extends CrudRepository<User, Long>
@Query(value="SELECT usr.id as id,usr.firstname as firstName, usr.age as age FROM user usr WHERE usr.id=?1", nativeQuery=true)
List<User2> getUserDetailsByUserId(Long id);
在 colsole 中出现以下错误:
org.springframework.core.convert.ConverterNotFoundException: 否 发现能够从类型 [java.math.BigInteger] 转换的转换器 输入 [com.user.entity.User2]
检查代码时出现错误:
无法从类型 [java.lang.Object[]] 转换为类型 [com.user.entity.User2] 为值 '403, firstnnnnnn, 26';
有没有办法将值映射到 user2(非表实体)?
【问题讨论】:
【参考方案1】:你应该使用projections:
Interface based:
public interface UserProjection
Long getId();
String getFirstname();
Integer getAge();
public interface UserRepository extends CrudRepository<User, Long>
List<UserProjection> findById(Long id);
Class based (DTO):
@Value // It's Lombok annotation
public class UserDto
Long id;
String firstname;
Integer age;
public interface UserRepository extends CrudRepository<User, Long>
List<UserProjection> findById(Long id);
List<UserDto> getById(Long id);
【讨论】:
嗨@Cepr0,您使用投影提供的解决方案完全符合我的要求。感谢您的解决方案。以上是关于在spring数据jpa中获取非表实体的数据的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Jpa框架自定义查询语句返回自定义实体
如何使用Spring数据jpa @Query注释直接获取学生列表
Spring Data JPA:查询如何返回非实体对象或对象列表?