首页 > 解决方案 > 如何在 JPA 和 Hibernate 中返回所有值

问题描述

我有一个场景,正在尝试使用hibernateand来返回 select 语句中的所有结果JPA。由于某些奇怪的原因,所有数据库中的值的数量都得到了正确的计数,因此它返回了第一个值 x 次,而不是从查询中获取所有唯一值。我select * from HSEC01X where hea ='0184' and hnum='0005'在数据库中执行时的查询输出

+-------+---------+--------+
| HEA   | HNUM    | HNAME  |
+-------+---------+--------+
| 0184  | 0005    | John   |
| 0184  | 0005    | Jane   |
| 0184  | 0005    | janet  |
| 0184  | 0005    | Arthur |
+-------+---------+--------+

这是我尝试过的。

   @Query("SELECT e FROM HSEC01X e WHERE e.hea = ?1 AND e.hnum = ?2")
        public Iterable<HSEC01X> findHSEC01XByheaAndhnum(@Param("hea") String hea, @Param("hnum") String hnum);
    }

这个结果集有四条记录,但它只打印第一个结果四次,而不是在查询中找到的所有值,这是我json得到的回复

        [
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "john"
  },
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "john"
  },
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "john"
  },
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "john"
  }
]

而不是得到

[
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "john"
  },
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "Jane"
  },
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "janet"
  },
  {
    "hea": "0014",
    "hnum": "0005",
    "hnames": "Arthur"
  }
]

这是模型

    @Entity
    @Table(name = "HSEC01X")
    public class HSEC01X {
        @Id
        @Column(name = "HEA")
        private String hea;
        @Column(name = "HNUM")
        private String hnum;
        @Column(name = "HNAME")
        private String hnames;
}

我的控制器

@GetMapping("/laptops/brandandprice")
    public ResponseEntity<List<HSEC01X>> getLaptopsByBrandAndPrice(@RequestParam String hea, String hnum) {
        return new ResponseEntity<>((List<HSEC01X>) hsec01X_repository.findHSEC01XByheaAndhnum(hea, hnum), HttpStatus.OK);
    }

如何从 select 语句中正确返回所有不同的结果?

标签: javaspring-boothibernatejpa

解决方案


您可以尝试为唯一的整数主键创建一个单独的字段并使用@JsonIgnore 对其进行注释。这将使您的数据库更具功能性,同时保持查询返回的 JSON 格式相同。

 @Entity
@Table(name = "HSEC01X")
public class HSEC01X {
    @Id
    @JsonIgnore
    @Column(name = "id")
    private int id;
    @Column(name = "HEA")
    private String hea;
    @Column(name = "HNUM")
    private String hnum;
    @Column(name = "HNAME")
    private String hnames;

}

对于SQL查询,如果我没记错的话,写起来不是更简单Query("SELECT * FROM HSEC01X WHERE hea = ?1 AND hnum = ?2")吗?


推荐阅读