代码之家  ›  专栏  ›  技术社区  ›  K. Ayoub

Spring boot双向关系或多个查询

  •  0
  • K. Ayoub  · 技术社区  · 6 年前

    我正在使用一个Spring Boot web服务,我想知道操作数据的最佳方式实体之间的关系。
    第一种方法是使用如下双向关系:
    标题实体:

    @Entity
    public class Title {
        private Integer id;
        private String name;
        private List<TitleCelebrity> titleCelebrities;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        @Basic
        @Column(name = "name")
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @OneToMany(mappedBy = "title", cascade = CascadeType.ALL)
        public List<TitleCelebrity> getTitleCelebrities() {
            return titleCelebrities;
        }
    
        public void setTitleCelebrities(List<TitleCelebrity> titleCelebrities) {
            this.titleCelebrities = titleCelebrities;
        }
    }
    

    TitleElebrity实体:

    @Entity
    @Table(name = "title_celebrity")
    public class TitleCelebrity {
        private Integer id;
        private String type;
        private Title title;
    
        @Id
        @Column(name = "id")
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        @Basic
        @Column(name = "type")
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "title_id")
        @JsonIgnore
        public Title getTitle() {
            return title;
        }
    
        public void setTitle(Title title) {
            this.title = title;
        }
    }
    

    所以每次我请求获得一个头衔,我都会得到一个头衔,上面有一个头衔列表,这就是我想要的。
    现在另一种方法不是使用双向关系,而是进行两个查询,第一个是获取标题,然后根据标题id进行第二个查询以获取titleElebrity。
    我喜欢第二条路,但这是最好的路吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Toby Caulk    6 年前

    为什么选择对资源要求更高的选项?如果使用后一个选项,请至少使用联接。执行两个查询而不是让数据库一次处理所有查询是不必要的资源浪费。

    另外,让ORM(hibernate)处理这样的基本查询。真的没有理由自己写这些问题。