Spring Boot实体(太大的对象)

时间:2017-04-10 09:06:33

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

我在Spring Boot中使用Spring Data JPA(Hibernate)

我有两个数据库表。首先是课程表&第二是学院表。 两个表都有大约20列。

现在,我的课程表有一列名为parent_id,它是Institute Table的ID。

我设计了两个指定JOIN列的实体,并且还提取了数据并且我的对象已准备就绪。

但问题是我不想在课程对象中找到完整的学院对象,我只想要学院id(listing_id)&名称。我如何设计我的实体。

课程实体

@Entity
@Table(name="courses")
public class Course implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private int id;

    @Column(name="course_id")
    private int courseId;

    private String status

    .. Other Properities...

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="parent_id", referencedColumnName="listing_id",insertable=false,updatable=false),
        @JoinColumn(name="status", referencedColumnName="status",insertable=false, updatable=false),
      })
    @Where(clause="status='live'")
    private Institute institute;

    .. Getters & setters

}

学院实体

@Entity
@Table(name="institutes")
public class Institute implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private int id;

    @Column(name="listing_id")
    private int listingId;

    private String status;

    @OneToMany(mappedBy="institute")
    private List<Course> Courses;

    .. Other Properties

    .. Getters & Setters

}

1 个答案:

答案 0 :(得分:0)

您可以声明CourseDTO对象。

public class CourseDTO {
  private int listingId;
  private String name;

  Get and set method ...
}

学院实体有很多课程。你可以选择一个pojo。前,

@Query("select new com.pakcage.name.CourseDTO(c.id, c.courseId, i.listingId, i.name) from Course c join Institute i where c.id=:id")
public CourseDTO fetchCourse(@Param("id") Long id);