首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

hibernate M-N 中间表属性修改有关问题

2013-07-16 
hibernate M-N 中间表属性修改问题问题 一个学生对应多门课 一个课对应多门学生 先要对s_c表中的一个学生

hibernate M-N 中间表属性修改问题
问题 一个学生对应多门课 一个课对应多门学生 先要对s_c表中的一个学生打分 怎么办




现有数据库

create table student(
sid varchar(32) not null primary key,
name varchar(10) not null,
age int(2),
tel varchar(11),
grade varchar(4),
sex char(2),
major varchar(20));

create table class(
cid varchar(32) not null primary key,
name varchar(10) not null);


hibernate M-N 中间表属性修改有关问题



create table s_c(
sid varchar(32) ,
cid varchar(32) ,
score int (3),
FOREIGN KEY (sid) REFERENCES student(sid) ON DELETE CASCADE ,
FOREIGN KEY (cid) REFERENCES class(cid) ON DELETE CASCADE,
primary key(sid,cid));




hibernate 配置文件
class.hbm.xml
<hibernate-mapping>
 <class catalog="eol" name="com.chang.hbm.Class" table="class">
  <id name="cid" type="string">
   <column length="32" name="cid"/>
   <generator class="uuid.hex"/>
  </id>
  <property generated="never" lazy="false" name="name" type="string">
   <column length="10" name="name" not-null="true"/>
  </property>
  <set cascade="all" inverse="false" lazy="false" name="student" 
   sort="unsorted" table="s_c">
   <key>
    <column length="32" name="cid" not-null="false"/>
   </key>
   <many-to-many class="com.chang.hbm.Student" column="sid" unique="false"/>
  </set>

student-hbm.xml

<hibernate-mapping>
 <class catalog="eol" name="com.chang.hbm.Student" table="student">
  <id name="sid" type="string">
   <column length="32" name="sid"/>
   <generator class="assigned"/>
  </id>
  <property generated="never" lazy="false" name="name" type="string">
   <column length="10" name="name" not-null="true"/>
  </property>
  <property generated="never" lazy="false" name="age" type="integer">
   <column name="age"/>
  </property>
  <property generated="never" lazy="false" name="tel" type="string">


   <column length="11" name="tel"/>
  </property>
  <property generated="never" lazy="false" name="grade" type="string">
   <column length="4" name="grade"/>
  </property>
  <property generated="never" lazy="false" name="sex" type="string">
   <column length="2" name="sex"/>
  </property>
  <property generated="never" lazy="false" name="major" type="string">
   <column length="20" name="major"/>
  </property>
  <set lazy="false" name="class1" sort="unsorted" table="s_c" cascade="all">
   <key>
    <column length="32" name="sid" not-null="false"/>
   </key>
   <many-to-many class="com.chang.hbm.Class" column="cid" unique="false"/>
  </set>
Hibernate
[解决办法]
QBC的话,大概是这样,

Criteria criteria = this.session.createCriteria(S_C.class);
criteria.createAlias("student", "s");
criteria.createAlias("class", "c");
criteria.add(Restrictions.eq("s.sid", "学生Id"));
criteria.add(Restrictions.eq("c.cid", "课程Id"));
List<S_C> list = criteria.list();
if (list.isEmpty())
  // 学生没选修这门课
if (list.size() != 1)
  // 数据保存有错
else
  list.get(0).setScore(分数);

供参考^_^

热点排行