需求:
两个实体类:Teacher.class Student.class 中间表包含了一个额外字段:score
Teacher.calss
id | name |
1 | Mr.zhang |
2 | Mr.wang |
Student.class
id | name |
1 | Xiaoming |
2 | Xiaohong |
中间表
id | teacher_id | student_id | score |
1 | 1 | 1 | 89 |
2 | 1 | 2 | 90 |
解决办法:
按照传统的多对多注解实现,中间表是以自身id为默认主键,另外包含了两个实体类的id,共3个字段,不能添加额外的字段。
解决办法是将ManyToMany 分解成两个OneToMany。
解决过程:
显示看到了这个blog:http://blog.csdn.net/liuxianbing119/article/details/7283769 知道这么处理,但是可以添加成功,删除一直不成功。
后来翻到了wiki里面的介绍:http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany
知道这种方法肯定没错,就又试了几次,终于成功了。
代码:
1. AbstractEntity.java
package com.cc.persistence;
import java.io.Serializable;
public abstract class AbstractEntity implements Persistable {
public abstract Serializable getInternalId();
@Override
public boolean equals(Object o) {
if (o == null) return false;
if (!o.getClass().getName().equals(this.getClass().getName())) return false;
return ((Persistable)o).getInternalId().equals(this.getInternalId());
}