隨筆-95  評論-31  文章-10  trackbacks-0
          注意點(diǎn):
          1: 不要?jiǎng)虞m就配置@OneToOne @OneToMany @ManyToOne @ManyToMany;
                根據(jù)業(yè)務(wù)想清楚當(dāng)前實(shí)體需不需要關(guān)聯(lián)的實(shí)體詳情,需要在配置;
                否則這種配置會(huì)增加sql查詢,需進(jìn)一步增加優(yōu)化操作,增加不必要的麻煩!
          示例1(配置了不必要的關(guān)聯(lián)關(guān)系)
          @Entity
          @Table(name = "sb_review")
          public class Review {
              @Id
              @GeneratedValue(strategy = GenerationType.IDENTITY)
              private Long id;
              /**
               * 評論
               
          */
              @Column(name = "content",length = 2048)
              private String reviewContent;
              /**
               * 內(nèi)容id
               
          */
               @Column(name = "reference_id",length = 2048)
              private Long  referenceId;
              /**
               * 當(dāng)前評論的人
               
          */
              @ManyToOne(targetEntity = Account.class,optional = false)
              @JoinColumn(name = "review_account_id", nullable = false,referencedColumnName = "id")
              private Account account;
              get/setxxx   ......
          }
          紅色部分就是不必要的關(guān)聯(lián)配置,這種配置在進(jìn)行from Review的時(shí)候會(huì)關(guān)聯(lián)查詢account實(shí)體,多出不必要的sql,如果要優(yōu)化,就還得Dao增加自定義的@Query注解方法,比較麻煩
          而實(shí)際業(yè)務(wù)可能并不需要當(dāng)前評論人的詳細(xì)信息,
          改進(jìn)后:
          @Entity
          @Table(name = "sb_review")
          public class Review {
              @Id
              @GeneratedValue(strategy = GenerationType.IDENTITY)
              private Long id;
              /**
               * 評論
               
          */
              @Column(name = "content",length = 2048)
              private String reviewContent;
              /**
               * 內(nèi)容id
               
          */
               @Column(name = "reference_id",length = 2048)
              private Long  referenceId;
              /**
               * 當(dāng)前評論的人
               
          */
              @Column(name="review_account_id")
              private Long reviewAccountId;

              get/setxxx   
          }
          紅色部分就配置屬性即可,從內(nèi)容方進(jìn)行關(guān)聯(lián)查詢多個(gè)評論的時(shí)候,就不會(huì)多出查詢賬戶信息的sql。

          2: 只要@Query使用jpql方式,那么方法入?yún)⒓尤雙ageable仍然可以正常分頁,但是無法用fetch!  示例:
              @Query(value = "select s from ShareCare s  left join s.reviewList ")
              Page<ShareCare> findAllWithReviews(Pageable pageable);

          3:做好第一步,領(lǐng)域模型配置好關(guān)聯(lián)關(guān)系后,看情況采用@Query注解查詢方式,增加join fetch操作可以減少sql查詢 

          posted on 2017-11-17 14:19 朔望魔刃 閱讀(3206) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 黔江区| 越西县| 东台市| 白银市| 连平县| 望都县| 安徽省| 六枝特区| 油尖旺区| 五台县| 包头市| 庆阳市| 甘肃省| 蒙自县| 历史| 禄丰县| 恩施市| 灵寿县| 子长县| 石首市| 富川| 内黄县| 泸西县| 商都县| 兴文县| 库车县| 汪清县| 渝中区| 米脂县| 灵寿县| 平度市| 高州市| 长武县| 台南市| 策勒县| 礼泉县| 衡阳县| 陆丰市| 淳安县| 临泉县| 辽宁省|