微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将JPQL查询中的键集存储在Java列表中

如何解决将JPQL查询中的键集存储在Java列表中

我成功地执行了jpql查询并打印了存储在queryResults变量中的结果。我接下来要实现的是将ID(主键列)仅存储在没有日期(值)的列表中,但是我不太确定这是否可行。也许使用像Java映射之类的东西。可能吗?如果是,如何轻松实现?

  private static final TestDao Test_DAO = new TestDao();

 @Test
 public void testById() {
List<TestEntity> queryResults = TEST_DAO.findById(""); //The record from the sql query is stored in queryResults and findById("") is the method that executes the query in a TestDao class and it is called here

for (TestEntity qResult: queryResults) { // looping through the query result to print the rows
System.out.println(qResult.getId());
System.out.println(qResult.getDate());
}

System.out.println("This is the sql result " + queryResults );
       
}

Output:
This is the result [TestEntity(id=101,date=2020-01-19 15:12:32.447),TestEntity(id=102,date=2020-09-01 11:04:10.0)]// I want to get the IDs 101 and 102 and store in a list without the Dates

我尝试通过以下方式使用map

Map<Integer,Timestamp> map= (Map<Integer,Timestamp>) queryResults.get(0);,但我有一个例外:

java.lang.classCastException: TestEntity cannot be cast to java.util.Map

解决方法

在实施之前有一些要点。

  1. 您为什么将DAO定义为静态?我认为这是一个不好的实现,除非我错过了将其声明为静态的特殊原因。您应该将此定义为成员变量,而不是静态成员
  2. 该方法的名称-findById()的英文翻译是-通过此ID查找内容,但是您正在获取记录列表,因此命名不正确。
  3. 如果 ID 属性不是表中的主键,则
  4. 第2点将变为无效,这很有意义,但命名仍然很糟糕。 Id是我们用来在数据库中定义主键的东西,应该并且将是唯一的。但是您的意见表明ID是唯一的,并且是主键。因此,请阅读有关数据库如何工作的信息
  5. 即使不是唯一的,如果您传递一个ID来查找一些记录,为什么还会在Records中获得不同的ID!

关于实施:

  1. 更改现有代码:
private TestDao Test_DAO = new TestDao();

@Test
public void testById() {
  List<TestEntity> queryResults = TEST_DAO.findById("");
  List<Long> listOfIds = new ArrayList<>(); // Assuming Id is Long type,same logic for any type
  for (TestEntity qResult: queryResults) {
    System.out.println(qResult.getId());
    listOfIds.add(qResult.getId());   // Just add it to the list
    System.out.println(qResult.getDate());
  }
       
}

如果您想提高查询效率: 您可以使用JPQLhibernate

然后您可以编写如下查询:

String query = "select te.id from TestEntity te";
// Create the TypedQuery using EntityManager and then get ResultSet back
List<Long> ids = query.getResultList();
  1. 如果使用Spring-Data-Jpa,则可以定义存储库和方法,并使用@Query注释传递查询。 Spring Data JPA

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。