首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用JPA关系实体创建RestAPI

如何使用JPA关系实体创建RestAPI
EN

Stack Overflow用户
提问于 2018-09-26 23:06:31
回答 1查看 53关注 0票数 0

我有个问题。当我有其他实体时,我不知道如何创建API。我使用Postman,当我请求查看数据库中的所有项目时,我也希望接收实体。

例如,这是我的实体:

代码语言:javascript
复制
@Entity
@Table(name = "project")
public class Project {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "proj_id")
    private int projectId;

    @Column(name = "project_name")
    private String projectName;

    @Column(name = "dg_number")
    private int dgNumber;

    @ManyToMany
    @JoinTable(name = "project_gate_relation", joinColumns = @JoinColumn(name = "proj_id"), inverseJoinColumns = @JoinColumn(name = "gate_id"))
    @JsonBackReference
    private  List<Gate> gates;

    @ManyToMany
    @JoinTable(name = "project_threshold_relation", joinColumns = @JoinColumn(name = "proj_id"), inverseJoinColumns = @JoinColumn(name = "thresholdgates_id"))
    @JsonBackReference
    private  List<Threshold> thresholds;

这是Gate实体

代码语言:javascript
复制
@Entity
@Table(name = "gate")
public class Gate {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "gate_id")
    private int gateId;

    @Column(name = "gate_type")
    private String gateType;

    @Column(name = "gate_value")
    private float value;

阈值实体

代码语言:javascript
复制
@Entity
@Table(name = "threshold")
public class Threshold {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "threshold_id")
    private int thresholdId;

    @Column(name = "threshold_value")
    private int thresholdValue;

    @Column(name = "threshold_type")
    private String thresholdType;

控制器

代码语言:javascript
复制
@RestController
@RequestMapping(ProjectController.PROJECT_URL)
public class ProjectController {

    public static final String PROJECT_URL = "/cidashboard/projects";

    @Autowired
    private final ProjectService projectService;

    public ProjectController(ProjectService projectService) {
        this.projectService = projectService;
    }

    @GetMapping
    public List<Project> getAllProjects(){
        return projectService.findAllProjects();
    }

    @GetMapping("/{id}")
    public Project getProjectById(@PathVariable int id) {
        return projectService.findProjectById(id);
    }

    @PostMapping
 //   @Consumes(MediaType.APPLICATION_JSON_VALUE)
    public Project saveProject(@RequestBody Project newProj) {
        return projectService.saveProject(newProj);
    }
}

当我在Postman中执行Get请求时,我收到以下输出,例如:

代码语言:javascript
复制
 {
        "projectId": 1,
        "projectName": "jenkins",
        "dgnumber": 1
    }, 

我希望能收到关于gate和threshold的信息。我不知道如何更准确地做这些事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-26 23:19:03

默认情况下,与@ManyToMany关联的数据是延迟加载的。您需要指定您希望立即加载(如果您使用的是spring-data,则可以使用实体图)。

详情请查看链接:Spring Data JPA And NamedEntityGraphs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52520910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档