Hibernate 组合主键映射、大对象映射、组件映射
来源:互联网 发布:samba源码下载 编辑:程序博客网 时间:2024/06/06 14:08
通过组件来实现组合主键的步骤:
这里举个例子,一个表有学生编号,科目编号,成绩,显然学生编号和科目编号的组合才能作为主键
1.编写组合主键的属性的类,该类必须实现Serializable
public class ScoreId implements Serializable { private int stuId;//学生编号 private int subjectId;//科目编号 public int getSubjectId() { return subjectId; } public void setSubjectId(int subjectId) { this.subjectId = subjectId; } public int getStuId() { return stuId; } public void setStuId(int stuId) { this.stuId = stuId; }}
2 .主类
public class Score { private ScoreId scoreId; private double result;//成绩 public ScoreId getScoreId() { return scoreId; } public void setScoreId(ScoreId scoreId) { this.scoreId = scoreId; } public double getResult() { return result; } public void setResult(double result) { this.result = result; }}
3 .映射文件编写
<hibernate-mapping package="cn.siggy.pojo"> <class name="Score"> <composite-id name="scoreId" class="ScoreId"> <key-property name="stuId"></key-property> <key-property name="subjectId"></key-property> </composite-id> <property name="result"></property> </class></hibernate-mapping>
4 .测试(session对象获得等封装在了HibernateUtil里面,略)
@Test public void testSave() throws HibernateException{ Session session=null; Transaction tx=null; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); Score s=new Score(); ScoreId sid=new ScoreId(); sid.setStuId(2); sid.setSubjectId(6); s.setResult(89); s.setScoreId(sid); session.save(s); tx.commit(); } catch(HibernateException e){ if(tx!=null){ tx.rollback(); e.printStackTrace(); throw e; } }finally{ HibernateUtil.closeSession(); } }
大对象映射
在pojo类中使用了大对象,比如Blob类和Clob类。比如Blob我们以前都是通过文件上传来来存储图片,如果我们要把它存放到数据库,那么如下。
1.pojo类
public class Student { private int id; private String name; private int age; //存放大数据 可以存放4G的内容 private Blob image; private Clob introduce;//省略get/set }
2.hbm配置 需要指定大对象的类型
<hibernate-mapping package="cn.siggy.pojo"> <class name="Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="age"/> <property name="image" type="java.sql.Blob"/> <property name="introduce" type="java.sql.Clob"/> </class></hibernate-mapping>
3.测试(session对象获得等封装在了HibernateUtil里面,略)
@Test public void testSave() throws HibernateException, SerialException, SQLException{ Session session=null; Transaction tx=null; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); Student stu = new Student(); stu.setName("尹志平"); stu.setAge(23); Blob blob = new SerialBlob("ttt".getBytes()); Clob clob = new SerialClob("sss".toCharArray()); stu.setImage(blob); stu.setIntroduce(clob); session.save(stu); tx.commit(); } catch(HibernateException e){ if(tx!=null){ tx.rollback(); e.printStackTrace(); throw e; } }finally{ HibernateUtil.closeSession(); } }
组件是一个被包含的对象 比如这里指一个人有很多个地址,直接把地址值写在一张表的时候,只涉及一张表,没有建立另外一张表和这种表地址id的外键,这个时候用主键。(但是不推荐这种表关系,因为这样维护起来很麻烦)
主类
public class Teacher { private int id; private String name; private String sex; private Address address;//省略get/set }
类Teacher的组件
public class Address { private String addr1; private String addr2; private String addr3; //省略get/set}
Teacher.hbm.xml
<hibernate-mapping package="cn.siggy.pojo"> <class name="Teacher"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="sex"/> <!-- 组件 --> <component name="address" class="Address"> <property name="addr1"/> <property name="addr2"/> <property name="addr3"/> </component> </class></hibernate-mapping>
测试(session对象获得等封装在了HibernateUtil里面,略)
@Test public void testSave() throws HibernateException, SerialException, SQLException{ Session session = null; Transaction tx = null; try{ session = HibernateUtil.getSession(); tx = session.beginTransaction(); Teacher t = new Teacher(); t.setName("老裴"); t.setSex("男"); Address address = new Address(); address.setAddr1("西三旗"); address.setAddr2("西直门"); address.setAddr3("南六环"); t.setAddress(address); session.save(t); tx.commit(); }catch (HibernateException e) { if(tx!=null) tx.rollback(); e.printStackTrace(); throw e; }finally{ HibernateUtil.closeSession(); } }
阅读全文
0 0
- Hibernate 组合主键映射、大对象映射、组件映射
- Hibernate 组合主键映射
- Hibernate联合主键映射以及组件映射
- hibernate 大对象映射
- Hibernate 大对象映射
- 组合主键映射
- Hibernate4-组合主键映射
- 组合主键映射
- Hibernate对象关系映射----复合主键、Component、集合映射
- Hibernate高级映射 --- 组件映射
- hibernate无主键映射
- hibernate映射主键 id
- hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate映射联合主键
- Hibernate联合主键映射
- hibernate映射联合主键
- soj3160: Clear And Present Danger_最短路Floyd
- listview、gridview上滑加载更多图片,内存溢出outofmemery的解决方案
- 代理模式
- Expect to Wait Gym
- jquery的设置多个 CSS 属性
- Hibernate 组合主键映射、大对象映射、组件映射
- 【连载】计算机组成原理 --- 第五章 中央处理器
- Tcp/Ip
- understand软件使用教程
- 连接池配置与调用(一)
- HQL之多表查询(一对多和多对多)
- python3执行linux命令
- matlab实现MSER(最大极值稳定区域)来进行文本定位
- 30.模式匹配高级实战:嵌套的Case class