hibernate之映射关系 1对多 +session常用方法

本文介绍了一种通过对象关系映射(ORM)技术实现班级与年级间数据关联的方法,利用Hibernate框架实现了班级表与年级表之间的多对一关联,并展示了如何通过Java类获取年级信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多个班级对应一个年级表 schoolclass             id name grade_id

grade id name

实体bean Grade.java

package my.bean;

public class Schoolclass implements java.io.Serializable {

 private long id;



 private String name;



 private Grade grade;



 public Schoolclass() {

 }

 public long getId() {

  return this.id;

 }

 public void setId(long id) {

  this.id = id;

 }



 public String getName() {

  return this.name;

 }



 public void setName(String name) {

  this.name = name;

 }



 public Grade getGrade() {

  return grade;

 }



 public void setGrade(Grade grade) {

  this.grade = grade;

 }



}



 

package my.bean;



public class Grade implements java.io.Serializable {

 private long id;



 private String name;

 public Grade() {

 }

 public Grade(String name) {

  this.name = name;

 }

 public long getId() {

  return this.id;

 }



 public void setId(long id) {

  this.id = id;

 }



 public String getName() {

  return this.name;

 }



 public void setName(String name) {

  this.name = name;

 }



}



映射 Schoolclass.hbm.xml

<hibernate-mapping>

    <class name="my.bean.Schoolclass" table="schoolclass" 



catalog="musichouse">

        <id name="id" type="long">

            <column name="id" />

            <generator class="identity" />

        </id>

        <property name="name" type="string">

            <column name="name" length="11" />

        </property>

        <many-to-one name="grade" class="my.bean.Grade" 



column="grade_id" update="false" insert="false"></many-to-one>

    </class>

</hibernate-mapping>



Grade.hbm.xml

<hibernate-mapping>

    <class name="my.bean.Grade" table="grade" catalog="musichouse">

        <id name="id" type="long">

            <column name="id" />

            <generator class="identity" />

        </id>

        <property name="name" type="string">

            <column name="name" length="11" />

        </property>   

    </class>

</hibernate-mapping>

使用  

 <%

     Dboperator dbo=new Dboperator();

    // dbo.getallclass2();

     Grade grade=  dbo.getGrade("1");

     out.println("id1的班级对应的年级是"+new String(grade.getName



().getBytes("iso-8859-1"),"GB2312"));

     %>

 public Grade getGrade(String id)

 {

  Configuration config = new Configuration().configure();

  SessionFactory sessionFactory = 



config.buildSessionFactory();

  Grade grade = new Grade();

  Schoolclass schoolclass=new Schoolclass();

  Session session = sessionFactory.openSession();

   Transaction tx = session.beginTransaction();

   String hql="from Schoolclass where id="+id;

  List mylist=session.createQuery(hql).list();

  if(mylist.size()>0)

  {

  schoolclass=(Schoolclass)mylist.get(0);

   

  }

  grade=schoolclass.getGrade();

  //session.close();

  sessionFactory.close();

  return grade;

  

 }




好处 使用班级类的getGrade方法可以获得整个Grade,而以前用表只能获得grade_id,

再根据grade_id取别的字段信息,麻烦..

  session方法 list = session.createQuery(hql).list(); //查询 session.save(grade);  //添加, session.update(grade);//更新 session.delete(grade);//删除

问题: session的一些操作写在Transaction之间有什么好处?  Transaction tx = session.beginTransaction();   session查询,添加,更新,删除  tx.commit();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值