当前位置: 首页 > 知识库问答 >
问题:

在Spring数据jpa中获取非表实体的数据

郭麒
2023-03-14

我有用户表,列id, mname, firstname, lastname, age(5列)使用Spring data jpa我只需要获取id, firstname, age(只有3列)

实用性低于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);
}

在科尔索勒中收到以下错误:

org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型[java.math.BigInteger]转换为类型[com.user.entity.User2]的转换器

检查代码时得到错误:

无法将值“{403,firstnnnnnnn,26}”从类型[java.lang.Object[]]转换为类型[com . user . entity . user 2];

有没有办法把值映射到user2(非表实体)?

共有1个答案

张绍晖
2023-03-14

您应该使用投影:

基于接口:

public interface UserProjection {
    Long getId();
    String getFirstname();
    Integer getAge();
}

public interface UserRepository extends CrudRepository<User, Long> {
    List<UserProjection> findById(Long id);
}

基于类别(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);
}
 类似资料:
  • 我正试图找到在ORM上映射我的数据的最佳方法。我有一个从MySQL数据库中获取数据的查询 用spring boot和spring的数据获得这些数据的最优方法是什么?? 我应该使用@query注释并执行它还是以某种方式为Equipment and Devices表创建实体,然后使用JPQL/HQL将表连接到查询中,但是我应该如何映射结果? 提前道谢。

  • 我在我的项目中使用Spring Data JPA和Hibernate JPA提供程序。在我的服务中,我有一个方法,它将一个实体保存在数据库中,而不是使用返回的对象,我试图获取关于该实体的更多细节。因此,无法获取详细信息。在日志中,我只看到insert语句,而没有select详细信息。 下面是我的代码: 更新:我从服务和测试中删除了@Transactional annotaion。现在,当我保存一个

  • 我在Spring boot版本1.3.6中使用Spring Data JPA。 null 这将返回父实体,而不是子实体。 知道怎么做吗?

  • 我有一个Spring批处理应用程序,需要从4个表中进行选择。问题是,我无法使用关系,将编写Enricher来选择完整数据。 目前我有几个问题: 是否可以以简单的方式从JpaRepository映射非实体(POJO)。我看到了的示例。我正在寻找自动映射(也许是JPA,而不是Spring Data)。我可以用结果精确地制作列名,但它不起作用。 将POJO标记为实体没问题,但有问题。实体需要。这对我来说

  • 在我的Spring Boot应用程序中,我使用Spring data jpa。在实体中,我需要从配置中选择架构名称,架构将发生变化,并且需要可配置。我试过下面的但不管用 模式。名称在应用程序中定义。属性文件 我收到“无法提取结果集”错误 有没有办法做到这一点? ===================编辑===============

  • 我有父实体和子实体之间的和关系。 我有这样的孩子 保存此数据后,数据库看起来如下所示, 我的问题是,为什么child的主键是2而不是1?在子表中,主键可以是1,外键对父表的引用可以是1。当我再添加一个父项时,表如下所示, 是我做错了什么,还是这是我预期的行为?