随笔-95  评论-31  文章-10  trackbacks-0
注意点:
1: 不要动辄就配置@OneToOne @OneToMany @ManyToOne @ManyToMany;
      根据业务想清楚当前实体需不需要关联的实体详情,需要在配置;
      否则这种配置会增加sql查询,需进一步增加优化操作,增加不必要的麻烦!
示例1(配置了不必要的关联关系)
@Entity
@Table(name = "sb_review")
public class Review {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    /**
     * 评论
     
*/
    @Column(name = "content",length = 2048)
    private String reviewContent;
    /**
     * 内容id
     
*/
     @Column(name = "reference_id",length = 2048)
    private Long  referenceId;
    /**
     * 当前评论的人
     
*/
    @ManyToOne(targetEntity = Account.class,optional = false)
    @JoinColumn(name = "review_account_id", nullable = false,referencedColumnName = "id")
    private Account account;
    get/setxxx   ......
}
红色部分就是不必要的关联配置,这种配置在进行from Review的时候会关联查询account实体,多出不必要的sql,如果要优化,就还得Dao增加自定义的@Query注解方法,比较麻烦
而实际业务可能并不需要当前评论人的详细信息,
改进后:
@Entity
@Table(name = "sb_review")
public class Review {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    /**
     * 评论
     
*/
    @Column(name = "content",length = 2048)
    private String reviewContent;
    /**
     * 内容id
     
*/
     @Column(name = "reference_id",length = 2048)
    private Long  referenceId;
    /**
     * 当前评论的人
     
*/
    @Column(name="review_account_id")
    private Long reviewAccountId;

    get/setxxx   
}
红色部分就配置属性即可,从内容方进行关联查询多个评论的时候,就不会多出查询账户信息的sql。

2: 只要@Query使用jpql方式,那么方法入参加入pageable仍然可以正常分页,但是无法用fetch!  示例:
    @Query(value = "select s from ShareCare s  left join s.reviewList ")
    Page<ShareCare> findAllWithReviews(Pageable pageable);

3:做好第一步,领域模型配置好关联关系后,看情况采用@Query注解查询方式,增加join fetch操作可以减少sql查询 

posted on 2017-11-17 14:19 朔望魔刃 阅读(3188) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: