关于网友提出的“ hibernate多对多单向关联,删除问题”问题疑问,本网通过在网上对“ hibernate多对多单向关联,删除问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: hibernate多对多单向关联,删除问题描述:
大家帮帮忙,我已经是黔驴技穷了。
问题是这样的
现有的系统中有两个表,一个叫veranstaltung(课程),另一个叫benutzer(老师),他们之间的关系时多对多的单向关联,中间表是betreuer。现在的问题是,如果我删除benutzer中的一条记录时,相应的中间表中的记录被删除。可是如果删除veranstaltung中的记录,对应在中间表中的记录删不了。造成了bug。
我现在要做到的是,删除veranstaltung中的一条记录,相应的中间表中的记录也删除。大家给点意见吧。
代码:
*******************************benutzer.java************************
/* */ package beans;
/* */
/* */ import java.util.Iterator;
/* */ import java.util.SortedSet;
/* */ import java.util.TreeSet;
/* */ import util.Encoder;
/* */
/* */ public class Benutzer
/* */ {
/* */ private Long bid;
/* */ private String benutzername;
/* */ private String passwort;
/* */ private Boolean admin;
/* */ private SortedSet
/* */
/* */ public Benutzer()
/* */ {
/* 17 */ this.veranstaltungen = new TreeSet();
/* */ }
/* */
/* */ public boolean checkUser(String username, String password)
/* */ {
/* 28 */ String SHAPass = Encoder.encode(password);
/* */
/* 30 */ return ((username.equals(this.benutzername)) && (SHAPass.equals(this.passwort.toLowerCase())));
/* */ }
/* */
/* */ public boolean checkUserHash(String username, String password)
/* */ {
/* 42 */ return ((username.equals(this.benutzername)) && (password.equals(this.passwort.toLowerCase())));
/* */ }
/* */
/* */ public boolean isBetreuer(Long id)
/* */ {
/* 53 */ if (this.admin.booleanValue()) {
/* 54 */ return true;
/* */ }
/* */
/* 57 */ for (Iterator it = this.veranstaltungen.iterator(); it.hasNext(); ) {
/* 58 */ Veranstaltung v = (Veranstaltung)it.next();
/* */
/* 60 */ if (id.equals(v.getVid())) {
/* 61 */ return true;
/* */ }
/* */ }
/* */
/* 65 */ return false;
/* */ }
/* */
/* */ public String getBenutzername()
/* */ {
/* 72 */ return this.benutzername;
/* */ }
/* */
/* */ public void setBenutzername(String benutzername)
/* */ {
/* 80 */ this.benutzername = benutzername;
/* */ }
/* */
/* */ public String getPasswort()
/* */ {
/* 88 */ return this.passwort;
/* */ }
/* */
/* */ public void setPasswordHash(String passwort) {
/* 92 */ String hash = Encoder.encode(passwort);
/* 93 */ this.passwort = hash;
/* */ }
/* */
/* */ public void setPasswort(String passwort)
/* */ {
/* 100 */ this.passwort = passwort;
/* */ }
/* */
/* */ public Long getBid()
/* */ {
/* 108 */ return this.bid;
/* */ }
/* */
/* */ private void setBid(Long bid)
/* */ {
/* 116 */ this.bid = bid;
/* */ }
/* */
/* */ public Boolean getAdmin()
/* */ {
/* 123 */ return this.admin;
/* */ }
/* */
/* */ public void setAdmin(Boolean admin)
/* */ {
/* 130 */ this.admin = admin;
/* */ }
/* */
/* */ public SortedSet
/* */ {
/* 137 */ return this.veranstaltungen;
/* */ }
/* */
/* */ public void setVeranstaltungen(SortedSet
/* */ {
/* 144 */ this.veranstaltungen = veranstaltungen;
/* */ }
/* */ }
*********************************************************************************
*******************benutzer.hbm.xml**************
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
**************************************************************************
***************veranstaltung.java*************************************
/* */ package beans;
/* */
/* */ import java.util.LinkedHashSet;
/* */ import java.util.Set;
/* */
/* */ public class Veranstaltung
/* */ implements Comparable
/* */ {
/* */ private Long vid;
/* */ private String name;
/* */ private Gruppe gruppe;
/* 11 */ private Set
/* */
/* */ public int compareTo(Veranstaltung v)
/* */ {
/* 18 */ return this.name.compareTo(v.getName());
/* */ }
/* */
/* */ public Long getVid()
/* */ {
/* 25 */ return this.vid;
/* */ }
/* */
/* */ private void setVid(Long vid)
/* */ {
/* 32 */ this.vid = vid;
/* */ }
/* */
/* */ public String getName()
/* */ {
/* 39 */ return this.name;
/* */ }
/* */
/* */ public void setName(String name)
/* */ {
/* 46 */ this.name = name;
/* */ }
/* */
/* */ public Set
/* */ {
/* 53 */ return this.termine;
/* */ }
/* */
/* */ public void setTermine(Set
/* */ {
/* 60 */ this.termine = termine;
/* */ }
/* */
/* */ public Gruppe getGruppe()
/* */ {
/* 67 */ return this.gruppe;
/* */ }
/* */
/* */ public void setGruppe(Gruppe gruppe)
/* */ {
/* 74 */ this.gruppe = gruppe;
/* */ }
/* */
/* */ public String toString() {
/* 78 */ return "[Veranstaltung: " + this.name + ", ID: " + this.vid + ", " + this.termine.size() + " Termine]";
/* */ }
/* */ }
*****************************************************************************
*******************veranstaltung.hbm.xml**********************************
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
********************************************************
解决方案1:
veranstaltung.hbm.xml benutzer.hbm.xml
中的关系属性列 弄成一样
----- 2个的 外键位置 和名称换下 试试!