-
hibnerate多对多插入数据重复问题
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
问题提出
一篇文章包含了N个成语,1个成语可能被N篇文章引用,如此就是多对多的关系,建立多对多办法如下:
Java代码
- @ManyToMany(fetch = FetchType.LAZY)
- @JoinTable(name = "lcell_article_idiom", joinColumns = { @JoinColumn(name = "articleId") }, inverseJoinColumns = { @JoinColumn(name = "idiomId") })
- @OrderBy(value = "id ASC")
- private Set<Idiom> idioms;
然而在实践中存在一个问题,Set保存的idiom存在重复,导致了hibernte抛出异常。
Set不是不会重复的吗?
-
原因分析与处理
set是不会被重复,但idiom必须要重写equal方法,不然有是单纯一个字段的相同,set不一定判断他们就是同一个元素。方法如下,在idiom类中,重写hasCode和equals方法
Java代码
- @Override
- public int hashCode() {// 重写hashCode方法
- return this.idiom.hashCode();
- }
- @Override
- public boolean equals(Object obj) {// 重写equals方法
- if (this == obj) {
- return true;
- }
- if (null != obj && obj instanceof Idiom) {
- Idiom p = (Idiom) obj;
- if (idiom.equals(p.idiom)) {// 判断name是否相同
- return true;
- }
- }
- return false;
- }
问题解决了~~
-
-
- 标签:
- 方法
- 分析
- 重复
- set
- obj
- equals
- 处理
- idiom
- 原因
- 重写
-
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~