时间:2021-07-01 10:21:17 帮助过:25人阅读
原本是通过报的异常 DuplicateKeyException,在catch语句里执行update。但是这里有一个问题,后面单独说。
- <span style="color: #008080;"> 1</span> <span style="color: #0000ff;">try</span><span style="color: #000000;"> {
- </span><span style="color: #008080;"> 2</span> <span style="color: #000000;"> resourceDao.insert(resource);
- </span><span style="color: #008080;"> 3</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 查询admingroup的id,添加关联</span>
- <span style="color: #008080;"> 4</span> <span style="color: #000000;"> AddAdminPermission(resource);
- </span><span style="color: #008080;"> 5</span> } <span style="color: #0000ff;">catch</span><span style="color: #000000;"> (DuplicateKeyException e) {
- </span><span style="color: #008080;"> 6</span> <span style="color: #008000;">//</span><span style="color: #008000;"> if (StringUtils.equals(update,Constants.KEY_FALSE)) {
- </span><span style="color: #008080;"> 7</span> <span style="color: #008000;">//</span><span style="color: #008000;"> throw new AuthServiceException(ErrorCode.RESOURCE_DUPLICATE_KEY, new Object[]{resource.getFdResName()}, e);
- </span><span style="color: #008080;"> 8</span> <span style="color: #008000;">//</span><span style="color: #008000;"> }else if (StringUtils.equals(update,Constants.KEY_TRUE)){
- </span><span style="color: #008080;"> 9</span> <span style="color: #008000;">//</span><span style="color: #008000;"> resourceDao.update(resource);
- </span><span style="color: #008080;">10</span> <span style="color: #008000;">//</span><span style="color: #008000;"> }</span>
- <span style="color: #008080;">11</span> <span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> AuthServiceException(ErrorCode.RESOURCE_DUPLICATE_KEY, <span style="color: #0000ff;">new</span><span style="color: #000000;"> Object[]{resource.getFdResName()}, e);
- </span><span style="color: #008080;">12</span> } <span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e) {
- </span><span style="color: #008080;">13</span> <span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> AuthServiceException(ErrorCode.RESOURCE_CREATE_FAILED, <span style="color: #0000ff;">new</span><span style="color: #000000;"> Object[]{resource.getFdResName()}, e);
- </span><span style="color: #008080;">14</span> }
示例语句:
- <span style="color: #800000; font-weight: bold;">1</span> <span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span><span style="color: #000000;"> the_table (id, column_1, column_2)
- </span><span style="color: #800000; font-weight: bold;">2</span> <span style="color: #0000ff;">VALUES</span> (<span style="color: #800000; font-weight: bold;">1</span>, <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">A</span><span style="color: #ff0000;">‘</span>, <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">X</span><span style="color: #ff0000;">‘</span>)<span style="color: #800000; font-weight: bold;">3</span> <span style="color: #0000ff;">ON</span> CONFLICT (唯一键) DO <span style="color: #0000ff;">UPDATE</span>
- <span style="color: #800000; font-weight: bold;">4</span> <span style="color: #0000ff;">SET</span> column_1 <span style="color: #808080;">=</span><span style="color: #000000;"><span style="color: #ff0000;">‘</span><span style="color: #ff0000;">A</span><span style="color: #ff0000;">‘</span>,
- </span><span style="color: #800000; font-weight: bold;">5</span> column_2 <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">X</span><span style="color: #ff0000;">‘</span>;
完整语句:
- <span style="color: #008080;"> 1</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">insert </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="insert"</span><span style="color: #ff0000;"> parameterType</span><span style="color: #0000ff;">="Resource"</span><span style="color: #ff0000;"> useGeneratedKeys</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;"> keyProperty</span><span style="color: #0000ff;">="fdResid"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;"> 2</span> <span style="color: #000000;"> INSERT INTO t_resource
- </span><span style="color: #008080;"> 3</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">trim </span><span style="color: #ff0000;">prefix</span><span style="color: #0000ff;">="("</span><span style="color: #ff0000;"> suffix</span><span style="color: #0000ff;">=")"</span><span style="color: #ff0000;"> suffixOverrides</span><span style="color: #0000ff;">=","</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;"> 4</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdResName != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;"> 5</span> <span style="color: #000000;"> fd_res_name,
- </span><span style="color: #008080;"> 6</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;"> 7</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdDisplayName != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;"> 8</span> <span style="color: #000000;"> fd_display_name,
- </span><span style="color: #008080;"> 9</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">10</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdResDesc != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">11</span> <span style="color: #000000;"> fd_res_desc,
- </span><span style="color: #008080;">12</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">13</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdTenantId != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">14</span> <span style="color: #000000;"> fd_tenantid,
- </span><span style="color: #008080;">15</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">16</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdService != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">17</span> <span style="color: #000000;"> fd_service,
- </span><span style="color: #008080;">18</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">19</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">trim</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">20</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">trim </span><span style="color: #ff0000;">prefix</span><span style="color: #0000ff;">="values ("</span><span style="color: #ff0000;"> suffix</span><span style="color: #0000ff;">=")"</span><span style="color: #ff0000;"> suffixOverrides</span><span style="color: #0000ff;">=","</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">21</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdResName != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">22</span> <span style="color: #000000;"> #{fdResName,jdbcType=VARCHAR},
- </span><span style="color: #008080;">23</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">24</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdDisplayName != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">25</span> <span style="color: #000000;"> #{fdDisplayName,jdbcType=VARCHAR},
- </span><span style="color: #008080;">26</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">27</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdResDesc != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">28</span> <span style="color: #000000;"> #{fdResDesc,jdbcType=VARCHAR},
- </span><span style="color: #008080;">29</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">30</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdTenantId != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">31</span> <span style="color: #000000;"> #{fdTenantId,jdbcType=INTEGER},
- </span><span style="color: #008080;">32</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">33</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdService != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">34</span> <span style="color: #000000;"> #{fdService,jdbcType=VARCHAR},
- </span><span style="color: #008080;">35</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">36</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">trim</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">37</span>
- <strong><span style="color: #008080;">38</span> <span style="color: #0000ff;"><</span></strong><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdUpdate == ‘true‘"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">39</span> <span style="color: #000000;"> ON CONFLICT(fd_res_name, fd_tenantid, fd_service) DO UPDATE
- </span><span style="color: #008080;">40</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">set</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">41</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdDisplayName != null"</span><span style="color: #0000ff;">></span>fd_display_name = #{fdDisplayName},<span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">42</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdResDesc != null"</span><span style="color: #0000ff;">></span>fd_res_desc = #{fdResDesc},<span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">43</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdService != null"</span><span style="color: #0000ff;">></span>fd_service = #{fdService},<span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">44</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdModifyDate != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">45</span> <span style="color: #000000;"> fd_modify_date = #{fdModifyDate,jdbcType=VARCHAR},
- </span><span style="color: #008080;">46</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">47</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">if </span><span style="color: #ff0000;">test</span><span style="color: #0000ff;">="fdModifyPerson != null"</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">48</span> <span style="color: #000000;"> fd_modify_person = #{fdModifyPerson,jdbcType=VARCHAR},
- </span><span style="color: #008080;">49</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">50</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">set</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">51</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">if</span><span style="color: #0000ff;">></span>
- <span style="color: #008080;">52</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">insert</span><span style="color: #0000ff;">></span>
4.遇到的问题
之前提到过,之前的处理是通过所报异常信息来做的。如果重复了,在catch语句里执行update。
- <span style="color: #cc7832;">try </span>{<br> <span style="color: #9876aa;">resourceDao</span>.insert(resource)<span style="color: #cc7832;">;<br></span><span style="color: #808080;">// </span><span style="color: #808080; font-family: ‘宋体‘;">查询</span><span style="color: #808080;">admingroup</span><span style="color: #808080; font-family: ‘宋体‘;">的</span><span style="color: #808080;">id,</span><span style="color: #808080; font-family: ‘宋体‘;">添加关联<br></span>AddAdminPermission(resource)<span style="color: #cc7832;">;<br></span>} <span style="color: #cc7832;">catch </span>(DuplicateKeyException e) {<br><span style="color: #808080;">// if (StringUtils.equals(update,Constants.KEY_FALSE)) {<br></span><span style="color: #808080;">// throw new AuthServiceException(ErrorCode.RESOURCE_DUPLICATE_KEY, new Object[]{resource.getFdResName()}, e);<br></span><span style="color: #808080;">// }else if (StringUtils.equals(update,Constants.KEY_TRUE)){<br></span><span style="color: #808080;">// resourceDao.update(resource);<br></span><span style="color: #808080;">// }<br></span><span style="color: #cc7832;">throw new </span>AuthServiceException(ErrorCode.<span style="color: #9876aa; font-style: italic;">RESOURCE_DUPLICATE_KEY</span><span style="color: #cc7832;">, new </span>Object[]{resource.getFdResName()}<span style="color: #cc7832;">, </span>e)<span style="color: #cc7832;">;<br></span>} <span style="color: #cc7832;">catch </span>(Exception e) {<br> <span style="color: #cc7832;">throw new </span>AuthServiceException(ErrorCode.<span style="color: #9876aa; font-style: italic;">RESOURCE_CREATE_FAILED</span><span style="color: #cc7832;">, new </span>Object[]{resource.getFdResName()}<span style="color: #cc7832;">, </span>e)<span style="color: #cc7832;">;<br></span>}
2017.7.7 postgreSQL在插入造成重复时执行更新
标签:set href family ack == object com conf har