【问题标题】:In springboot JPA one to one mapping response getting only values在spring boot JPA中,一对一的映射响应只获取值
【发布时间】:2019-04-08 02:52:33
【问题描述】:

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

@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;
    }

JPA 存储库扩展 crud 存储库并调用实体类中声明的命名查询。

@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 响应。

【问题讨论】:

  • 您是通过某些控制器获得响应还是如何获得响应?
  • 是的,使用控制器
  • 为此添加代码,尤其是在您使用并返回使用getDeployment()获取的数据的地方
  • 我已经添加了控制器类
  • 为什么有命名查询?让结果变平?

标签: spring-boot jpa spring-data-jpa


【解决方案1】:

我不太确定您正在尝试做什么以及实际发生了什么(以及为什么它甚至可能)。但正如您所见,您的 JSON 不是 ActivitiProcessDeployment 的列表,而是字符串列表的列表。

您的命名查询不返回ActivitiProcessDeployments,而是返回一个列值列表。没有任何命名查询和如下界面:

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

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

并且如果您需要进行投影,请参阅此question & answer

【讨论】:

  • @vikram 查看我对类似问题的另一个答案的更新
猜你喜欢
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多