2017-04-10 9 views
0

私はスプリングブートでJPA(Hibernate)を使用しています。スプリングブートエンティティ(大きすぎるオブジェクト)

私は2つのデータベーステーブルを持っています。最初はコース表&秒は研究所表です。 どちらの表にも約20列あります。

今、My Course Tableには、Institute TableのIDであるparent_idという名前の列が1つあります。

JOIN列を指定する2つのエンティティを設計しました。データもフェッチされ、オブジェクトは準備が整いました。

しかし、問題は私はコースオブジェクトの中に完全な研究所オブジェクトを必要としません、私はちょうど機関inst(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 

} 
+0

"light"研究所オブジェクトのみをどのレベルで使いたいですか?エンティティレベルで、またはエンティティがJSONにシリアル化され、REST APIで返される場合 – dunni

+0

エンティティが実際に作成されるエンティティレベル。また、エンティティがJSONにシリアル化され、REST APIに返されたときの処理方法を知りたいと思います。 –

+0

エンティティ内の特定のフィールドだけが必要な場合は、不要なフィールドをすべて削除してください。 JSONのシリアライゼーションについて: '@ JsonView'アノテーションを見てください。 – dunni

答えて

0

あなたはCourseDTOオブジェクトを宣言することができます。

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

    Get and set method ... 
} 

Instituteエンティティには多くのコースがあります。pojoを選択できます。 ex、

@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); 
関連する問題