Hibernate学习——(七)联合主键映射以及组件映射
来源:互联网 发布:德云色衣服淘宝店网址 编辑:程序博客网 时间:2024/05/16 08:07
一、联合主键映射
如果有时候需要将多个属性合并在一起作为主键,则需要使用使用联合主键映射的形式。
首先将联合主键需要的属性包装在一个class中:
ManagerPK.java:
package cn.wqy.dao;import java.io.Serializable;public class ManagerPK implements Serializable{private int manager_id;private String manager_name;public int getManager_id() {return manager_id;}public void setManager_id(int manager_id) {this.manager_id = manager_id;}public String getManager_name() {return manager_name;}public void setManager_name(String manager_name) {this.manager_name = manager_name;}}注意这里要继承Serializable接口,bean类必须序列化。
之后在实体类中作关于联合主键的annotation:
Manager.java:(部分代码见下)
@IdClass(ManagerPK.class)public class Manager {private int manager_id;private String manager_name;private String manager_password;@Idpublic int getManager_id() {return manager_id;}@Idpublic String getManager_name() {return manager_name;}
} ...
之后要对从表对应的实体类进行annotation设置:(部分代码见下)
@OneToOne@JoinColumns({@JoinColumn(name = "Man_Id", referencedColumnName = "manager_id"),@JoinColumn(name = "Man_Name", referencedColumnName = "manager_name") })public Manager getManager() {return manager;}
在测试类中做如下测试:
@Testpublic void testManagerSave() {ManagerPK m_PK = new ManagerPK();Manager m = new Manager();Manager_Msg msg = new Manager_Msg();Session s = HibernateSessionFactory.getSession();Transaction tran = s.beginTransaction();m_PK.setManager_id(1);m_PK.setManager_name("王qy");m = (Manager) s.get(Manager.class, m_PK);msg.setManager_id(1);msg.setManager_name("王qy");msg.setManager(m);System.out.println(msg.getManager().getManager_password());tran.commit();s.close();}
在此处get方法中需要添加的是联合主键对象m_PK,否则会报主键对象不匹配的错误。
二、组件映射
在Hibernate中,组件是某个实体的逻辑组成部分,它与实体的根本区别是没有oid(对象标识符),组件是一个被包含的对象
他作为值类型被持久化,而非一个实体。利用组件映射,可以将存在映射关系的两个类对应的字段放在同一张表中。
在附加的类中,去掉@Entity,@Id等annotation标记,注意其不能有主键,同时注意不能有命名上的冲突。
之后,在被附加的类上加上新的Annotation标记:
@Embeddedpublic Manager getManager() {return manager;}同时注意在hibernate.cfg.xml文件中不能有附加组件的mapping声明,只有实体类的mapping声明。
采用组件映射的优点:实现了对象细粒度的划分,层次更加分明,复用率高。上面的student类,分为了基本信息id、name,
还将联系方式作为contact类分离了出来,此外,还可以将爱好等信息再作为一类分离出来,这是我理解的细粒度的划分。分离出来
的联系方式和爱好等,也可以作为其他对象(例如teacher、employer等)的组件,这样就为用提供了方便。
0 0
- Hibernate学习——(七)联合主键映射以及组件映射
- Hibernate联合主键映射以及组件映射
- Hibernate映射联合主键
- Hibernate联合主键映射
- hibernate映射联合主键
- Hibernate联合主键映射
- Hibernate联合主键映射
- Hibernate联合主键映射
- Hibernate联合主键映射
- hibernate联合主键映射
- Hibernate联合主键映射
- Hibernate联合主键映射
- Hibernate中联合主键映射学习
- 2 Hibernate映射 属性 主键 集合 组件 联合主键
- Hibernate学习_010_联合主键映射(Annotation方式)
- Hibernate框架-联合主键映射
- hibernate映射文件中的id标签以及联合主键
- 10hibernate hibernate的关系映射之联合主键和组件映射
- jQuery 点击“回复”,跳转到文本输入框
- linux 服务器配置(二)
- Ubuntu14.04-x64+Caffe
- android Matrix的pre、post、set三种变形方式
- Redis缓存Mysql模拟用户登录Java实现实例
- Hibernate学习——(七)联合主键映射以及组件映射
- 51NOd 1134 最长递增子序列(dp)
- android程序更换图标安装后不变解决办法
- 制作Mac U盘启动盘
- 开发优化-经理优化
- pthread_exit(void *rval_ptr)和pthread_join(pthread_t thread, void **rval_ptr)
- 规则引擎drools
- 使用CSV文件处理EXcel数据
- Java NIO框架--Netty4的简单示例