2018-09-16開發(fā)筆記

Sonar煩惱

??今天把一個業(yè)務項目上傳到了SonarQube,提示代碼重復率7.5%蚓庭,默認的標準是5%猪瞬,超標了。

??本來因為只是個用作數(shù)據(jù)收集的新項目富岳,使用到的表比較少蛔糯,而表的基本字段有重復,使用了Spring-boot-data-jpa生成的model對象屬性便有部分重復窖式。

??本來是個小事情蚁飒,置之不理就好,但是萝喘。淮逻。。

??嘗試使用extends對model進行繼承結構梳理阁簸,A extends B爬早,嘗試編譯,報錯:【子類builder不能覆蓋父類】启妹。因為在model上使用了lombok的builder注解筛严,創(chuàng)建的builder方法不能覆蓋。

??由于builder結構的便利性饶米,在業(yè)務代碼中多次使用了類似A.builder().aaa().bbb().build()這種寫法桨啃,不忍舍棄车胡,嘗試google解決,得到@SuperBuilder注解照瘾,在最新的lombok18上有提供吨拍,趕緊更改依賴包版本,更改注解測試网杆,按文檔說明父類子類都使用@SuperBuilder標注羹饰,測試方法中嘗試B.builder(),未能獲得。使用compile編譯碳却,觀察生成class文件队秩,的確已經(jīng)存在使用了泛型并且支持繼承關系的builder對象和builder()方法,為什么不成功呢昼浦?

??猜測是lombok插件的問題馍资,打開idea的插件管理器,查看lombok plugin支持注解列表說明关噪,果然沒有@SuperBuilder鸟蟹,看來只支持到1.16的lombok版本。嘗試雙擊lombok.jar安裝插件使兔,發(fā)現(xiàn)只支持eclipse核心ide建钥,想讓我換開發(fā)工具?不存在的~ 算了放棄放棄虐沥。

??嘗試@Accessors注解熊经,加上chain=true之后,生成的setter方法會將自身返回欲险,看起來很好用镐依,然而子類的示例,調(diào)用了父類屬性的setter之后天试,返回的對象就變成父類了槐壳,需要聲明下類型轉(zhuǎn)換,略麻煩喜每。

??還是回到@Builder注解做文章务唐,觀察注解屬性列表,發(fā)現(xiàn)builder方法名灼卢、類名绍哎、build方法名来农,都是可以更改的鞋真!嘗試加上(builderMethodName = "aesbuilder")進行編譯,通過了沃于!觀察生成的builder方法涩咖,已然變成了aesbuilder()海诲,very Good。

??然而檩互,同時也發(fā)現(xiàn)了一個嚴重問題特幔,builder返回的Builder類,支持的屬性設置闸昨,只有子類的蚯斯,而繼承自父類的屬性并不在里面。而事實上饵较,@SuperBuilder正是用來解決這一問題的拍嵌,然而并沒有可用的idea插件。循诉。横辆。

??google發(fā)現(xiàn)了一個大神給的方案,@Builder聲明在構造方法上茄猫,而構造方法參數(shù)里狈蚤,把需要用到的屬性逐個聲明一遍,雖然略笨重划纽,不過看似可行脆侮,于是改造代碼為

    @Builder(builderMethodName = "aesbuilder")
    public ActivityEventStatistic(final Long id, final String pageCode, final String eventCode, final Integer pv, final Integer uv, final Integer timeHour,final String activityCode){
        super(id, pageCode, eventCode, pv, uv, timeHour);
        this.activityCode = activityCode;
    }

    public static void main(String[] args) {
        ActivityEventStatistic.aesbuilder().id(123l).pageCode("test").build();
    }

it works! wow~

??OK,編譯通過勇劣,進入測試階段他嚷,test case跑起來,然后duang~ 又遇到問題了芭毙!提示執(zhí)行的查詢sql筋蓖,屬性未找到。分析之后發(fā)現(xiàn)退敦,由于model使用了繼承粘咖,而沒有顯示聲明Inheritance策略,所以jpa使用了默認的策略SINGLE_TABLE侈百,也就是父類子類公用了一張表瓮下,再加上并沒有聲明哪些屬性屬于子類,所以就報錯了钝域。

??另外讽坏,很顯然,我這種情況并不能使用SINGLE_TABLE例证,而應該使用TABLE_PER_CLASS路呜。ok,在model上加上@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS),再次run test胀葱,報錯如下:

nested exception is org.hibernate.MappingException: Cannot use identity column key generation with <union-subclass> mapping for: com.quzeng.idss.domain.PageStatistic

??查找問題后得知漠秋,在model上使用了繼承關系后,就不能使用自動主鍵策略了抵屿,而只能用GenerationType.TABLE才可以庆锦。。轧葛。吐血搂抒。。尿扯。

??ok燕耿,創(chuàng)建表hibernate_sequences,添加字段sequence_name,next_val姜胖,嘗試run test誉帅,總算成功了。右莱。蚜锨。

??但是,面臨的問題還是有的慢蜓,首當其沖的是亚再,GenerationType.TABLE被人詬病因為每次請求時的鎖機制造成的性能嚴重影響的問題,參考:why-you-should-never-use-the-table-identifier-generator-with-jpa-and-hibernate晨抡,另外一個氛悬,是我要對每個表創(chuàng)建ID生成器,指定序列器名稱耘柱、范圍如捅,以及hibernate_sequences 表中要添加好相應記錄,還要將這些改動腳本整理下來调煎,告知DBA镜遣,說是因為一個蛋疼的重復率指標導致的主鍵策略改動,還不知道會不會被拒絕掉士袄。悲关。。

??哎娄柳,你說我瞎折騰什么呢寓辱。??

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赤拒,隨后出現(xiàn)的幾起案子秫筏,更是在濱河造成了極大的恐慌诱鞠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跳昼,死亡現(xiàn)場離奇詭異般甲,居然都是意外死亡肋乍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腔剂,“玉大人解寝,你說我怎么就攤上這事∶倜觯” “怎么了帝雇?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛉拙。 經(jīng)常有香客問我尸闸,道長,這世上最難降的妖魔是什么孕锄? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任吮廉,我火速辦了婚禮,結果婚禮上畸肆,老公的妹妹穿的比我還像新娘宦芦。我一直安慰自己,他們只是感情好轴脐,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布调卑。 她就那樣靜靜地躺著,像睡著了一般大咱。 火紅的嫁衣襯著肌膚如雪恬涧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天碴巾,我揣著相機與錄音气破,去河邊找鬼。 笑死餐抢,一個胖子當著我的面吹牛现使,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旷痕,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碳锈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了欺抗?” 一聲冷哼從身側(cè)響起售碳,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贸人,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间景,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年艺智,在試婚紗的時候發(fā)現(xiàn)自己被綠了倘要。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡十拣,死狀恐怖封拧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夭问,我是刑警寧澤泽西,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站缰趋,受9級特大地震影響捧杉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秘血,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一味抖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧直撤,春花似錦非竿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蓖乘,卻和暖如春锤悄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘉抒。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工零聚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人些侍。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓隶症,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岗宣。 傳聞我的和親對象是個殘疾皇子蚂会,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容