• hibnerate多对多插入数据重复问题

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 问题提出

    一篇文章包含了N个成语,1个成语可能被N篇文章引用,如此就是多对多的关系,建立多对多办法如下:

    Java代码 

    1. @ManyToMany(fetch = FetchType.LAZY)  
    2. @JoinTable(name = "lcell_article_idiom", joinColumns = { @JoinColumn(name = "articleId") }, inverseJoinColumns = { @JoinColumn(name = "idiomId") })  
    3. @OrderBy(value = "id ASC")  
    4. private Set<Idiom> idioms;  

    然而在实践中存在一个问题,Set保存的idiom存在重复,导致了hibernte抛出异常。

    Set不是不会重复的吗? 

    • 原因分析与处理

    set是不会被重复,但idiom必须要重写equal方法,不然有是单纯一个字段的相同,set不一定判断他们就是同一个元素。方法如下,在idiom类中,重写hasCode和equals方法

    Java代码 

    1. @Override  
    2. public int hashCode() {// 重写hashCode方法  
    3.  return this.idiom.hashCode();  
    4. }  
    5. @Override  
    6. public boolean equals(Object obj) {// 重写equals方法  
    7.  if (this == obj) {  
    8.   return true;  
    9.  }  
    10.  if (null != obj && obj instanceof Idiom) {  
    11.   Idiom p = (Idiom) obj;  
    12.   if (idiom.equals(p.idiom)) {// 判断name是否相同  
    13.    return true;  
    14.   }  
    15.  }  
    16.  return false;  
    17. }  

    问题解决了~~

    • 标签:
    • 方法
    • 分析
    • 重复
    • set
    • obj
    • equals
    • 处理
    • idiom
    • 原因
    • 重写
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部