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

Spring Boot JPA如何使用实体类从表中选择特定列?

万开畅
2023-03-14

在我的数据库操作中使用Spring引导JPA。在我的实体类中,我用我的表映射了每个列。在我的表中,我有很多列,但是我需要在我的查询结果集中选择其中的一些。我不需要做select*fromtable_name,这给我的应用程序带来了性能问题。

我的实体类:

@Entity
@Table(name = "user_table")
public class UserInformation {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private int userId;

    @Column(name = "user_name")
    private String userName;

    @Column(name = "user_type")
    private String userType;

    @Column(name = "user_age")
    private int userAge;

    @Column(name = "is_male")
    private boolean isMale;
}

在此之后,我生成了上述类的所有getter和setter。

我的userDAO类

public interface UserInformationRepo extends 
         JpaRepository<UserInformation, String>{

    @Query(value="select user_name from user_table where user_age > 
               :userAge", nativeQuery=true)
    public UserInformation getInfo(int userAge);\

    @Query(value="select user_name,userType, user_id  from user_table where 
          user_age > :userAge", nativeQuery=true)
    public UserInformation getInfo(int userAge);
}

当我用上面的类运行这个spring boot应用程序时,它显示错误为

结果集中未包含用户id

此错误是因为我没有从查询中选择用户id。

在我的userDAO类中,我有多个函数,每个函数需要不同的列集,但是所有方法的返回类型都应该是UserInformation类。

我的例外结果是,我没有从查询中选择的列在我的result UserInformation对象中应该有空值。

我也搜索了很多资源,但找不到任何相关的答案。

任何帮助。提前谢谢

共有3个答案

家弘业
2023-03-14

一种方法是使用userIduserName创建UserInformation的构造函数

package com.demo.model;

public UserInformation( String userName, String userType, String userId){
    this.userName = userName;
    this.userType = userType;
    this.userId = userId;
}

然后

 @Query(value="select new com.demo.model.UserInformation
               (user_name,userType, user_id)  
                from user_table where 
                user_age > :userAge", nativeQuery=true)
刘昌翰
2023-03-14

如果为实体创建投影(仅包含必要的属性),最简单的解决方案是:

public interface UserInformationNameProjection {
  String getUserName();
}

然后,您可以这样定义存储库方法(您甚至不需要id!):

@Query(value="select user_name from user_table where user_age > 
           :userAge", nativeQuery=true)
public UserInformationNameProjection getInfo(int userAge);

让Spring Data JPA完成剩下的工作。:)

茅星雨
2023-03-14

用户id是用户信息对象中的主键。最好在查询中包含UserInformation对象中的所有列:

public interface UserInformationRepo extends 
         JpaRepository<UserInformation, String>{

    @Query(value="select * from user_table where user_age > 
               :userAge", nativeQuery=true)
    public UserInformation getInfo(int userAge);
    @Query(value="select *  from user_table where 
          user_age > :userAge", nativeQuery=true)
    public UserInformation getInfo(int userAge);

        }

如果你的user_表有大量信息,你可以只列出你关心的列,但一定要包括@Id(主键)。

 类似资料:
  • 问题内容: 理想情况下,我需要一个等于 但这是非法的。 我不能使用自动递增的字段。 row_number()是需要选择的行。 我该怎么办? 编辑:嗯,我使用iSql * plus进行练习,出于某些原因,使用limit和auto_increment是非法的。我最终创建了一个序列和一个触发器,并且每次输入一个条目时,ID都增加了1。 问题答案: 您可以使用代替。 如文档所述, 第一个参数指定要返回的第

  • 我假设我可以做这样的事情,但这样会处理乐观锁情况吗(我通过表上的版本列使用它)

  • 我想显示“users”表中两个指定列“first_name”和“pic”的所有值。我正在尝试“Pulk”,但它在echo时显示为json格式。但我需要展示给大家看,一些东西——‘John pic’。求求你,有人帮帮我。这是我在“索引”中的示例代码。刀身php的吼声-

  • 我将html写成 现在我希望如果选项是1,那么它应该被选择为 请帮帮我!!!

  • 问题内容: 我想选择,,从多个选择其中有10个选项。我只想选择这三个选项。 HTML代码: selenium键代码: 我尝试使用此代码。使用此代码,我可以选择第一个选项,即“ P0_ENGLISH”。但是,选择第一个选项后,我得到一个错误: 问题答案: 要从 Multi Select 元素中选择多个 选项 ,可以使用 ActionChains 模拟 Control单击* ,如下所示: *

  • 结果我只想要abc,xyz,jkl。 相同的正则表达式或代码是什么...?