ManyToMany(多對多)persistence
來源:互聯網
上載者:User
ManyToMany(多對多)
//領導類 @Entity public class Leader{ private Set<Employee> employees = new HashSet<Employee>();
@ManyToMany(
targetEntity=Employee.class,
cascade={CascadeType.ALL}//想用主表控制次表,必須寫all
)
@JoinTable( name="LEADER_EMPLOYEE", //中間表名
joinColumns=@JoinColumn(name="LEADER_ID"), // 列名 LEADER_ID
inverseJoinColumns=@JoinColumn(name="EMPEE_ID") // 列名 EMPEE_I
) public Set<Employee> getEmployees(){ return employees; }
}
@Entity
//員工類 public class Employee{ private Set<Leader> Leaders = new HashSet<Leader>();
@ManyToMany( cascade = {CascadeType.ALL},
mappedBy = "employees",//相等於inverse
//如果不加這一句,會多產生一個中間表
targetEntity = Leader.class )
public Set<Leader> getLeaders() { return Leaders; }
}
//測試類別 public class Test{
//以領導表為主表
public void
addLeaderAndEmployee (){
Leader leader = new Leader();
leader.setLeaderName("張三");
leader.setPosition("主管");
Employee employee = new Employee();
employee.setEmpName("馬仔");
leader.getEmployees().add(employee);
//session.save(employee)//如果主表中cascade不是all,必須要加上這一句
session.save(leader);
}
//以員工表為主表
public void
addLeaderAndEmployee (){
Employee employee = new Employee();
employee.setEmpName("馬仔3");
Leader leader = new Leader();
leader.setLeaderName("張三3");
leader.setPosition("主管3");
leader.getEmployees().add(employee);
employee.getLeaders().add(leader);
session.save(employee); session.beginTransaction().commit();
} public static void main(String[] args){ } } ---------------------------------------------------------bulid.xml
<!-- 產生資料庫 -->
<!-- ================================================================ -->
<target name="gen data base" description="產生資料庫">
<echo message="刪除目錄 ${webapp}/schema" />
<delete dir="${webapp}/schema" />
<echo message="建立目錄 ${webapp}/schema" />
<mkdir dir="${webapp}/schema" />
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="ant.classpath" />
<hibernatetool destdir="./">
<annotationconfiguration configurationfile="${resource}/hibernate.cfg.xml" />
<hbm2ddl export="true" outputfilename="${webapp}/schema/sql.sql" />
</hibernatetool>
</target>