问题的描述非常简单:
有3个东西,学校->年级->班级,问题在于删除年级时级联删除班级。
school(主键:schoolid),grade(主键:schoolid,gradeid),tclass(主键:schoolid,gradeid,tclassid)
grade和tclass有点复合外健的味道,但是设置复合外健后eclipse自动生成的.hbm报错,所以我没在grade和tclass上设置外健,而是手工添加了两段。
<set name="tclassSet" inverse="true" cascade="all">
<key>
<column name="schoolid"/>
<column name="gradeid"/>
</key>
<one-to-many class="Tclass"/>
</set>
<many-to-one name="grade" class="Grade">
<column name="schoolid"/>
<column name="gradeid"/>
</many-to-one>
结果加载hibernate时,配置文件出错。
详细内容请看下贴
有3个东西,学校->年级->班级,问题在于删除年级时级联删除班级。
school(主键:schoolid),grade(主键:schoolid,gradeid),tclass(主键:schoolid,gradeid,tclassid)
grade和tclass有点复合外健的味道,但是设置复合外健后eclipse自动生成的.hbm报错,所以我没在grade和tclass上设置外健,而是手工添加了两段。
<set name="tclassSet" inverse="true" cascade="all">
<key>
<column name="schoolid"/>
<column name="gradeid"/>
</key>
<one-to-many class="Tclass"/>
</set>
<many-to-one name="grade" class="Grade">
<column name="schoolid"/>
<column name="gradeid"/>
</many-to-one>
结果加载hibernate时,配置文件出错。
详细内容请看下贴
解决方案 »
- 这些都什么标签?
- 多线程 执行流程
- 求助一个问题
- 怎样做二维报表?最好的能给个例子
- 刚解决查询的问题,现在插入数据库又有问题,郁闷
- Elcipse 配置错误,急救解决!!
- 在线影院中的“点击播放”改如何实现?
- JB7中怎么添加servlet程序
- 复选框打勾出现文本框,文本框有多个参数
- 严重: Exception sending context initialized event to listener instance of class or
- 用jfreechart画柱状图的时候怎么把数字标到柱子上面去呢?
- 为什么这段javascript 在jsp中不能执行啊,在html文件中是却是好好的呀(在线等啊)
create table school (
schoolid int not null,
schoolName varchar(50) not null,
notes varchar(200),
constraint PK_SCHOOL primary key (schoolid)
);
create table grade (
schoolid int not null,
gradeid int not null,
gradeName varchar(50),
notes varchar(200),
constraint PK_GRADE primary key (schoolid,gradeid)
);
create table tClass(
schoolid int not null,
gradeid int not null,
tclassid int not null,
tclassName varchar(50),
notes varchar(200),
constraint PK_GRADE primary key (schoolid,gradeid,tclassid)
);
alter table grade
add constraint fk_grade_school foreign key(schoolid)
references school(schoolid)
;
/*
alter table tClass
add constraint fk_tclass_grade foreign key(schoolid,gradeid)
references grade(schoolid,gradeid)
;*/
insert into school(schoolid,schoolname,notes)values(123,'highschool','test');
insert into grade(schoolid,gradeid,gradename)values(123,234,'g1');
insert into tclass(schoolid,gradeid,tclassid,tclassname)values(123,234,345,'test');--2.hibernate配置文件(3个,school的省略,只列出grade,tclass)
--grade.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<!-- DO NOT EDIT: This is a generated file that is synchronized -->
<!-- by MyEclipse Hibernate tool integration. -->
<!-- Created Tue Dec 12 14:44:40 CST 2006 -->
<hibernate-mapping package="model">
<class name="Grade" table="grade">
<composite-id name="id" class="GradeKey">
<key-property name="gradeid" column="gradeid" type="java.lang.Integer"/>
<key-many-to-one name="school" column="schoolid" class="School"/>
</composite-id>
<property name="gradename" column="gradeName" type="java.lang.String" />
<property name="notes" column="notes" type="java.lang.String" />
<set name="tclassSet" inverse="true">
<key>
<column name="schoolid"/>
<column name="gradeid"/>
</key>
<one-to-many class="Tclass"/>
</set>
</class>
</hibernate-mapping>
--tclass.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<!-- DO NOT EDIT: This is a generated file that is synchronized -->
<!-- by MyEclipse Hibernate tool integration. -->
<!-- Created Tue Dec 12 14:44:44 CST 2006 -->
<hibernate-mapping package="model">
<class name="Tclass" table="tclass">
<composite-id name="id" class="TclassKey">
<key-property name="gradeid" column="gradeid" type="java.lang.Integer"/>
<key-property name="schoolid" column="schoolid" type="java.lang.Integer"/>
<key-property name="tclassid" column="tclassid" type="java.lang.Integer"/>
</composite-id>
<property name="tclassname" column="tclassName" type="java.lang.String" />
<property name="notes" column="notes" type="java.lang.String" />
<many-to-one name="grade" class="Grade">
<column name="schoolid"/>
<column name="gradeid"/>
</many-to-one>
</class>
</hibernate-mapping>--3.java类
--*************AbstractGrade.java*************--
package model; import java.io.Serializable;
public abstract class AbstractGrade
implements Serializable
{
private int hashValue = 0;
private GradeKey id;
private java.lang.String gradename;
private java.lang.String notes;
private java.util.Set tclassSet;
public java.util.Set getTclassSet() {
return tclassSet;
}
public void setTclassSet(java.util.Set tclassSet) {
this.tclassSet = tclassSet;
}
public AbstractGrade()
{
}
public AbstractGrade(GradeKey id)
{
this.setId(id);
}
public GradeKey getId()
{
return this.id;
}
public void setId(GradeKey id)
{
this.hashValue = 0;
this.id = id;
}
public java.lang.String getGradename()
{
return this.gradename;
}
public void setGradename(java.lang.String gradename)
{
this.gradename = gradename;
}
public java.lang.String getNotes()
{
return this.notes;
}
public void setNotes(java.lang.String notes)
{
this.notes = notes;
}
public boolean equals(Object rhs)
{
if (rhs == null)
return false;
if (! (rhs instanceof Grade))
return false;
Grade that = (Grade) rhs;
if (this.getId() == null || that.getId() == null)
return false;
return (this.getId().equals(that.getId()));
}
public int hashCode()
{
if (this.hashValue == 0)
{
int result = 17;
if (this.getId() == null)
{
result = super.hashCode();
}
else
{
result = this.getId().hashCode();
}
this.hashValue = result;
}
return this.hashValue;
}
}
--*************AbstractTclass.java*************--
package model; import java.io.Serializable;
public abstract class AbstractTclass
implements Serializable
{
private int hashValue = 0;
private TclassKey id;
private java.lang.String tclassname;
private java.lang.String notes;
private Grade grade;
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
public AbstractTclass()
{
}
public AbstractTclass(TclassKey id)
{
this.setId(id);
}
public TclassKey getId()
{
return this.id;
}
public void setId(TclassKey id)
{
this.hashValue = 0;
this.id = id;
}
public java.lang.String getTclassname()
{
return this.tclassname;
}
public void setTclassname(java.lang.String tclassname)
{
this.tclassname = tclassname;
}
public java.lang.String getNotes()
{
return this.notes;
}
public void setNotes(java.lang.String notes)
{
this.notes = notes;
}
public boolean equals(Object rhs)
{
if (rhs == null)
return false;
if (! (rhs instanceof Tclass))
return false;
Tclass that = (Tclass) rhs;
if (this.getId() == null || that.getId() == null)
return false;
return (this.getId().equals(that.getId()));
}
public int hashCode()
{
if (this.hashValue == 0)
{
int result = 17;
if (this.getId() == null)
{
result = super.hashCode();
}
else
{
result = this.getId().hashCode();
}
this.hashValue = result;
}
return this.hashValue;
}
}
建议用单一ID做主键,有关联的根据需要配置:<one-to-many>或者<many-to-one>
debug发现是session = HibernateUtil.currentSession();这句报的错。
实际上就是配置文件的错。
是不是配置文件里面没加package名