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

来自不同来源的HIbernate JPA查询没有生成正确的Jackson JSON响应

史钊
2023-03-14

我正在从多个表/POJO中检索数据。我想要JSON格式的数据。在Pojo类中,我使用@JsonProperty。但我仍然没有得到所需格式的结果Json。我的结果是:

[["2017 Sprint 1","Android development",23/12/2016,16/01/2017]]

我想要格式的结果 { “迭代”: “2017 Sprint 1”, “project”: “MDM - Core”

我的主控制器方法:

@Controller
@RequestMapping("/json/retrospective")
public class MainControllerClass 
{
    @RequestMapping(value="{userid}", method = RequestMethod.GET,produces=MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public List<Details> getInfoInJSON(@PathVariable int userid)
    {
        Configuration con = new Configuration();
        con.configure("hibernate.cfg.xml");
        SessionFactory SF = con.buildSessionFactory();
        Session session= SF.openSession();
        Query test=session.createQuery("select itr.iteration_name,prj.project_name,itr.isd,itr.ied from RetrospectiveInfo retro,IterationInfo itr,ProjectInfo prj where retro.retrospective_id ="+userid+" and retro.project_id = prj.project_id and retro.iteration_id = itr.iteration_id");
        List<Details> details= test.list();
        session.close();
        SF.close();
        return details;
    }
}

课程详情:

public class Details 
{
    @JsonProperty("iteration")
    private String iteration;
    @JsonProperty("project")
    private String project;
    @JsonProperty("isd")
    private Date isd;
    @JsonProperty("ied")
    private Date ied;


getter/setters

我在buildpath中有3个Jackson JAR注释、数据绑定和最新版本2.8的核心。为什么我会得到这样的结果??我需要在代码中做哪些更改??是否要添加任何罐子??好心帮忙


共有1个答案

尚安平
2023-03-14

主要问题是,您正在构造一个 Details 类,该类是使用不同类型的检查从 JPA 查询形成的(错误:无法为具有多个返回的查询创建 TypedQuery)

要解决这个问题,请为所需的JSON属性创建一个构造函数

package com.sof.type;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonPropertyOrder({ "iteration", "project", "isd", "ied"})
public class Details {

    @JsonProperty
    private String iteration;

    @JsonProperty
    private String project;

    @JsonProperty
    private String isd;

    @JsonProperty
    private String ied;

    public Details(String iteration, String project, String isd, String ied) {
        this.iteration = iteration;
        this.project = project;
        this.isd = isd;
        this.ied = ied;
    }

}

那就这样用吧

@PersistenceContext
private EntityManager em;

或者

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("com.sof");
EntityManager em = entityManagerFactory.createEntityManager();

具有

List<Details> details = em.createQuery(
        "SELECT NEW  com.sof.type.Details(itr.iteration_name, prj.project_name, itr.isd, itr.ied) " +
        "FROM RetrospectiveInfo retro, " +
        "     IterationInfo itr, " + 
        "     ProjectInfo prj " +
        "WHERE retro.retrospective_id = :userId " +
        "AND retro.project_id = prj.project_id " +
        "AND retro.iteration_id = itr.iteration_id", Details.class)
    .setParameter("userId", userid)
    .getResultList();
 类似资料:
  • 我有一个复合密钥的实体。订阅和源具有多对多的关系。 我正在使用Spring数据存储库来处理它。 当我尝试使用方法saveAll时,它会抛出 “com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception:未知列'subscripti0_.subscription_id'” 同时尝试在保存后返回值。 Hibernate生成以下查询: 所以,现在我

  • --我只是试图从html中检索数据,这样我就可以从应用程序的url中显示更新的数据,是Volly的方式还是我应该使用更简单的方法? 下面是我的volley StringRequest和RequestQueue:

  • 如何在Grafana的同一面板中使用来自不同查询的prometheus查询结果。 实例 我在格拉法纳有3个普罗米修斯查询,

  • 问题内容: 我正在尝试从C#查询SQL Server数据库 我有课 我的查询中有问题。 当我给普通查询“从表中选择*”时,这给了我完美的结果。 但是当我尝试给出条件时,它给了我错误。有什么建议可以解决吗?谢谢。 问题答案: 钿狅笍 警告 此答案包含一个SQL注入安全漏洞。不要使用它。如该问题的其他一些答案所述(例如,Tony Hopkinson的答案),请考虑使用参数化查询。 尝试在where子句

  • 但是生成的SQL查询是 正如您所看到的,括号改变了,我相信两个查询中的条件并不相同。是虫子吗?使用hibernate和spring以及postgresql数据库。

  • 当我尝试提交表单时,tomcat抛出“客户端发送的请求在语法上不正确”这是我的jsp表单。请帮帮我。 容器: DTO: 我正在尝试从用户列表中获取文章类别