动态获取Nhibernate的ORM配置信息,实现系统历史记录功能
2009-02-18 22:08
471 查看
1
问题场景
系统的数据层采用 Spring.net 框架。
项目对数据的要求
1)每一个业务表的业务信息只能注销,不能物理删除(也就是我们经常说的保存历史数据)
2)不能将表的失效信息暴露在实体类中
2 解决流程
解决的流程
Step one 通过Session中的SessionFactory 查找到业务实体类的ORM信息
在这里,我们最关注ORM信息中的有两点
1) 业务实体类 -------- 数据库中表
2) 业务实体类的主键属性 ---数据库中列信息
补充说明:
在这边我们支持类的映射信息配置的主键主要包含了三个组成方式
1 类的主键类型为复合主键且子主键为key-property
2 类的主键类型为复合主键且子键中包含了key-property 也包含了key-many-to-one
3 类的主键类型直接为property
Step Two 根据ORM信息取对应数据库中表的列对应的业务实体属性值
Step Three 将Step Two 提取出来的的信息转化成我们需要数据格式
属性 属性说明
TableName 表名
IdentifierColumnNames 主键对应数据库表中的列名
identifierValues 业务实体中的主键属性值
KeyNum 主键的列数目
Step Four 根据 step three 的信息拼装SQL语句并执行
3类的设计
2
public class ClassMappingInfoBuilder
}
问题场景
系统的数据层采用 Spring.net 框架。
项目对数据的要求
1)每一个业务表的业务信息只能注销,不能物理删除(也就是我们经常说的保存历史数据)
2)不能将表的失效信息暴露在实体类中
2 解决流程
解决的流程
Step one 通过Session中的SessionFactory 查找到业务实体类的ORM信息
在这里,我们最关注ORM信息中的有两点
1) 业务实体类 -------- 数据库中表
2) 业务实体类的主键属性 ---数据库中列信息
补充说明:
在这边我们支持类的映射信息配置的主键主要包含了三个组成方式
1 类的主键类型为复合主键且子主键为key-property
2 类的主键类型为复合主键且子键中包含了key-property 也包含了key-many-to-one
3 类的主键类型直接为property
Step Two 根据ORM信息取对应数据库中表的列对应的业务实体属性值
Step Three 将Step Two 提取出来的的信息转化成我们需要数据格式
属性 属性说明
TableName 表名
IdentifierColumnNames 主键对应数据库表中的列名
identifierValues 业务实体中的主键属性值
KeyNum 主键的列数目
Step Four 根据 step three 的信息拼装SQL语句并执行
3类的设计
2
public class ClassMappingInfoBuilder
}
相关文章推荐
- 运用百度地图API离线版(在线版)实现网管系统中终端定位和终端信息获取的功能
- 学生信息记录系统,主要实现增删改查功能
- 银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第四篇(用户管理功能的实现)
- 使用Java实现B/S系统常见的获取客户端信息功能!
- 学生信息记录系统,主要实现增删改查功能,考虑用堆栈、队列来写下
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第四篇(用户管理功能的实现)
- 使用Java实现B/S系统常见的获取客户端信息功能!
- 一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)
- 如何实现用户的历史记录功能(最多n条)
- 用JS实现浏览历史记录功能
- Linux上实现Windows的SQLPlus保存SQL历史记录功能
- 医院管理系统(实现功能:浏览医院的整体结构,给定任意节点输出该节点信息就子节点信息,计算在给出点之间的“病房的数量”)
- 使用python获取CPU和内存信息的思路与实现(linux系统)
- 使用cookies实现浏览历史记录功能
- 在Win10系统下如何开启文件历史记录功能
- 使用python获取CPU和内存信息的思路与实现(linux系统)
- spring配置日志切面,实现系统操作日志记录
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- Android系统获取应用的Crash信息,保存在本地(可以自己实现上传到自己的服务器)