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

在springboot JPA中,一对一映射响应只获得值

红鸿运
2023-03-14

将返回响应的控制器类的代码:

@RestController
@RequestMapping("/ProcessInfo/1.0.0")
public class RestController {
@ApiOperation(value = "getdeployments", notes = "This REST API is used to get deployments")
    @GetMapping(value = "/getdeployments")
    private List<ActivitiProcessDeployment> getdeployments() {

        return ActivitiGetDeploymentRepository.getDeployment();
    }

下面是具有一对一映射的两个实体类。

 @Entity
@NamedQueries({@NamedQuery(name="ActivitiProcessDeployment.getDeployment", query="SELECT a.id,a.name,a.category,a.tenantId,a.deployTime,b.category,b.key,b.resource_name,b.version,b.deploymentId,b.diagramResourceName,b.description,b.id,b.hasStartFormKey,b.hasGraphicalNotation_,b.suspensionState,b.tenant_id_ FROM ActivitiProcessDeployment a INNER JOIN ActivitiProcessDefinition b ON a.id=b.deploymentId ORDER BY a.id")})
@Table(name="act_re_deployment")
public class ActivitiProcessDeployment implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @JsonProperty
    @Column(name="id_")
    private String id;

    @JsonProperty
    @Column(name="name_")
    private String name;

    @JsonProperty
    @Column(name="category_")
    private String category;

    @JsonProperty
    @Column(name="tenant_id_")
    private String tenantId;

    @JsonProperty
    @Column(name="deploy_time_")
    private Date deployTime;

    @JsonProperty
    @OneToOne( cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    @JoinColumn(name="deploymentId", nullable=true)
    private ActivitiProcessDefinition activitiProcessDefinition;
    }
 @Entity
@Table(name="act_re_procdef")
public class ActivitiProcessDefinition implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @JsonProperty("process_def")
    @Id
    @Column(name="id_")
    private String id;

    @JsonIgnore
    @Column(name="rev_")
    private String rev;

    @JsonProperty
    @Column(name="category_")
    private String category;

    @JsonProperty
    @Column(name="name_")
    private String name;

    @JsonProperty
    @Column(name="key_")
    private String key;

    @JsonProperty
    @Column(name="resource_name_")
    private String resource_name;

    @JsonProperty
    @Column(name="version_")
    private String version;

    @JsonProperty
    @Column(name="deployment_id_")
    private String deploymentId;
    }
@Repository
public interface ActivitiGetDeploymentRepository extends JpaRepository<ActivitiProcessDeployment, Long> {

    public List<ActivitiProcessDeployment> getDeployment();

} 

我得到的回应是:

    [
    [
        "1",
        "ExecutionTaskListener",
        null,
        "-1234",
        "2018-10-29T07:31:48.373+0000",
        "http://www.activiti.org/test",
        "myProcess",
        "ExecutionTaskListener.bpmn20.xml",
        "1",
        "1",
        "ExecutionTaskListener.myProcess.png",
        null,
        "myProcess:1:4",
        "f",
        "t",
        "1",
        "-1234"
    ],
    [
        "13",
        "multiinstance (1)",
        null,
        "-1234",
        "2018-10-29T07:31:49.901+0000",
        "http://www.activiti.org/test",
        "multiinstance",
        "multiinstance.bpmn20.xml",
        "1",
        "13",
        "multiinstance.multiinstance.png",
        null,
        "multiinstance:1:16",
        "f",
        "t",
        "1",
        "-1234"
    ],
    [
        "23",
        "testing",
        null,
        "-1234",
        "2018-10-29T07:31:50.591+0000",
        "http://www.activiti.org/test",
        "myProcess",
        "testing.bpmn20.xml",
        "2",
        "23",
        "testing.myProcess.png",
        null,
        "myProcess:2:26",
        "f",
        "t",
        "1",
        "-1234"
    ]
]

如上面的响应所示,我只得到json值,我的意思是只得到没有列名的表值。因此,如何将json响应映射到响应协同响应键上。

共有1个答案

莘聪
2023-03-14

我不太确定你在尝试做什么,实际发生了什么(以及为什么可能)。但是可以看到,JSON不是ActivitiProcessDeployment的列表,而是字符串列表。

您的命名查询不返回ActivitiProcessDeployment,而是返回列值列表。没有任何命名查询和如下所示的接口:

public interface ActivitiGetDeploymentRepository
            extends JpaRepository<ActivitiProcessDeployment, Long> {
    public List<ActivitiProcessDeployment> findAllOrderById();
}

你可能会得到更好的结果。它不会像JSON那样平坦,但ActivitiProcessDefinition将嵌套在ActivitiProcessDeployment中。

如果你需要做投影,请看这个问题和答案。

 类似资料:
  • 我试图在Spring创建两个实体之间的多对一映射。然而,当我尝试使用restController获取值时,我得到了 JAVAlang.IllegalStateException:在提交响应后无法调用sendError() 错误和无限JSON响应。添加JSON ignore解决了这个问题,但我的回复中根本没有这个列。我不知道怎么解决这个问题。请帮忙。提前谢谢。 以下是我的实体: 存储库: 我的错误:

  • 假设我调用了一个RESTful服务,它在响应体中返回这个 我只需要得到映射键为' en '的值 所以我期望过滤后的结果会像这样 [“Reason1 英文翻译”、“Reason2 英文翻译”] 或 {"Reason1英文翻译","Reason2英文翻译"} 我已经尝试了下一个代码,但仍未完成 然后它返回 [{en=Reason1英文翻译,es=Reason2西班牙文翻译},{en=Reason2英文

  • 有两张数据表,其中A表的某个字段的值指向B表的主键。因为A表的任何一条记录只能对应B表的一条且唯一一条记录,所以称这种 映射为A表对B表数据的一对一映射。(当然,反过来,你也可是说,是B表对A表的一对多映射)。 上述结构,如果用 POJO 来表示的话,可以参看下图: 如上图, Pet 中就可以有一个字段 master,通过自身的 masterId 指向一个 Master 对象,那么我们说 Pet.

  • 我必须用不同的键和值将rest模板响应映射到我的DTO。目前我正在从rest api获得这个json响应 我想将其映射到我的 DTO 中,以便能够保存到数据库中 我想要的是只获得相同的动态密钥,以匹配上述api的响应。目前我正在这样做,但似乎我没有设置相同键的正确值。 执行此操作后,我的数据库中出现空值。

  • 主要内容:@OneToOne示例,程序输出结果一对一映射映射表示一个单值关联,其中一个实体的实例与另一个实体的实例相关联。在这种类型的关联中,源实体的一个实例可以映射到目标实体的一个实例。 完整的项目目录结构如下所示 - @OneToOne示例 在这个例子中,我们将创建一个学生和图书库之间的一对一关系,这样一个学生只能发放一种类型的图书。 这个例子包含以下步骤 - 第1步: 在包下创建一个实体类,在包下创建一个实体类,含学生ID()和学生姓名

  • 问题内容: 我正在尝试在Hibernate中将一对一关系映射为“零或一个”关系。我想我可能已经找到了使用多对一方法。 A类的映射指定: B类的映射指定: 我想在数据库中找不到B的匹配行时b为null。所以我可以做到这一点(在A类中): 但是,看来b永远不会为空。 我该怎么办? 问题答案: 答案是在A中的多对一语句中添加not-found =“ ignore”: 我尝试按照Rob H的建议,简单地向