【问题标题】:Fetch data for non table entity in spring data jpa在spring数据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(非表实体)?

【问题讨论】:

    标签: java spring-data-jpa


    【解决方案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,您使用投影提供的解决方案完全符合我的要求。感谢您的解决方案。
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多