Hibernate (4.1.2) and Spring (3.1.2) – ManyToMany relationship does not store records in JoinTable

前端 未结 1 1209
孤独总比滥情好
孤独总比滥情好 2021-01-03 15:35

I have a problem and need your help to overcome this issue. Hopefully, this tread may become a reference for similar issues…

In my minimized business model there are

1条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-03 16:11

    The only correct way is the first one:

    @ManyToMany(mappedBy = "users")
    public Set getTitles() {
        return titles;
    }
    
    ...
    
    @ManyToMany
    @JoinTable(name = "tb_title_user",
               joinColumns = @JoinColumn(name = "title_id"),
               inverseJoinColumns = @JoinColumn(name = "user_id"))
    public Set<User> getUsers() {
        return users;
    }
    </code></pre>
    <p>The inverse side uses the <code>mappedBy</code> attribute to say: "I'm the inverse side. Go see the <code>users</code> attribute in the target entity to see how this association is mapped."</p>
    <p>What you're doing wrong is that you only modify the inverse side in your test. JPA/Hibernate only considers the owner side to know if an association exists. So instead of doing</p>
    <pre><code>user.getTitles().add(title);
    </code></pre>
    <p>you should do</p>
    <pre><code>title.getUsers().add(user);
    </code></pre>
    <p>or even better, do both, to make sure the object graph is coherent.</p>
    <p>I really hope that this tread becomes a reference for similar issues, but I doubt it, because I have already answered this question a gazillion times, and it keeps coming again and again, although it's clearly explained in the documentation:</p>
    <blockquote>
    <p>If the association is bidirectional, one side has to be the owner and one side has to be the inverse end (ie. it will be ignored when updating the relationship values in the association table):</p>
    <p>[ follows an example with the appropriate annotations on each side of a bidirectional many-to-namy association ]</p>
    </blockquote>
        </p>
                 <div class="appendcontent">
                                                            </div>
                </div>
                <div class="jieda-reply">
                  <span class="jieda-zan button_agree" type="zan" data-id='1586611'>
                    <i class="iconfont icon-zan"></i>
                    <em>0</em>
                  </span>
                       <span type="reply" class="showpinglun" data-id="1586611">
                    <i class="iconfont icon-svgmoban53"></i>
                   讨论(0)
                  </span>
                                                      
                  
                  <div class="jieda-admin">
                              
                 
           
              
                  </div>
                                        </div>
                             <div class="comments-mod "  style="display: none; float:none;padding-top:10px;" id="comment_1586611">
                        <div class="areabox clearfix">
    
    <form class="layui-form" action="">
                   
                <div class="layui-form-item">
        <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label>
        <div class="layui-input-block" style="margin-left:90px;">
             <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" />
                            <input type='hidden' value='0' name='replyauthor' />
        </div>
        <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="1586611">提交评论 </span></div>
      </div>
      
    </form>
                        </div>
                        <hr>
                        <ul class="my-comments-list nav">
                            <li class="loading">
                            <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />
                             加载中...
                            </li>
                        </ul>
                    </div>
              </li>
                                  			
            </ul>
            
            <div class="layui-form layui-form-pane">
              <form id="huidaform"  name="answerForm"  method="post">
                
                <div class="layui-form-item layui-form-text">
                  <a name="comment"></a>
                  <div class="layui-input-block">
                
        
    <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.config.js"></script>
    <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.all.js"></script>
    <script type="text/plain" id="editor"  name="content"  style="width:100%;height:200px;"></script>                                 
    <script type="text/javascript">
                                     var isueditor=1;
                var editor = UE.getEditor('editor',{
                    //这里可以选择自己需要的工具按钮名称,此处仅选择如下五个
                    toolbars:[['source','fullscreen',  '|', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'link', 'unlink', 'anchor', '|', 'simpleupload', 'insertimage', 'scrawl', 'insertvideo', 'attachment', 'map', 'insertcode', '|', 'horizontal', '|', 'preview', 'searchreplace', 'drafts']],
                
                    initialContent:'',
                    //关闭字数统计
                    wordCount:false,
                    zIndex:2,
                    //关闭elementPath
                    elementPathEnabled:false,
                    //默认的编辑区域高度
                    initialFrameHeight:250
                    //更多其他参数,请参考ueditor.config.js中的配置项
                    //更多其他参数,请参考ueditor.config.js中的配置项
                });
                            editor.ready(function() {
                	editor.setDisabled();
                	});
                                $("#editor").find("*").css("max-width","362px");
            </script>              </div>
                </div>
                              
        
    
            
             <div class="layui-form-item">
                    <label for="L_vercode" class="layui-form-label">验证码</label>
                    <div class="layui-input-inline">
                      <input type="text"  id="code" name="code"   value="" required lay-verify="required" placeholder="图片验证码" autocomplete="off" class="layui-input">
                    </div>
                    <div class="layui-form-mid">
                      <span style="color: #c00;"><img class="hand" src="https://www.e-learn.cn/qa/user/code.html" onclick="javascript:updatecode();" id="verifycode"><a class="changecode"  href="javascript:updatecode();"> 看不清?</a></span>
                    </div>
                  </div>
                                      <div class="layui-form-item">
                        <input type="hidden" value="634044" id="ans_qid" name="qid">
       <input type="hidden" id="tokenkey" name="tokenkey" value=''/>
                    <input type="hidden" value="Hibernate (4.1.2) and Spring (3.1.2) – ManyToMany relationship does not store records in JoinTable" id="ans_title" name="title"> 
                 
                  <div class="layui-btn    layui-btn-disabled"  id="ajaxsubmitasnwer" >提交回复</div>
                </div>
              </form>
            </div>
          </div>
          <input type="hidden" value="634044" id="adopt_qid"	name="qid" /> 
          <input type="hidden" id="adopt_answer" value="0"	name="aid" />
        </div>
        <div class="layui-col-md4">
              
     <!-- 热门讨论问题 -->
         
     <dl class="fly-panel fly-list-one">
            <dt class="fly-panel-title">热议问题</dt>
                <!-- 本周热门讨论问题显示10条-->