隨筆-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 朔望魔刃 閱讀(3218) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 永川市| 吉木乃县| 浦北县| 临邑县| 四平市| 哈巴河县| 宜黄县| 锡林浩特市| 禄劝| 黄梅县| 隆德县| 辽中县| 于都县| 西乡县| 沧州市| 乌兰浩特市| 武胜县| 嘉峪关市| 台中县| 壶关县| 佳木斯市| 宝清县| 萍乡市| 大庆市| 庆安县| 苗栗县| 洛隆县| 恩平市| 临海市| 焉耆| 宝山区| 杭锦旗| 谢通门县| 邵武市| 高碑店市| 胶南市| 南丹县| 隆林| 崇明县| 和平县| 台江县|