Hibernate复合主键(注解)操作分区数据表
2015-07-02 16:58
381 查看
1. 首先创建分区数据表(详见:MySQL按日期月份分区实例详解)
2. 创建复合主键的组件类
需要注意@Embeddable用来标示此类是复合主键类,必须要覆盖equals和hashCode两个方法
3. 创建POJO类(与数据库对应)
注意@IdClass(TestId.class)
4. 测试增删改查
注意如果单单定义POJO类,那么在update的时候会出现“Duplicate ‘’ primary key”这种诡异的错误,定义好联合主键后,增删改查操作全部正常进行,这里以Spring+hibernate的方式为例
注:如果测试中发现问题欢迎在下方提问,大家一起讨论
2. 创建复合主键的组件类
需要注意@Embeddable用来标示此类是复合主键类,必须要覆盖equals和hashCode两个方法
@Embeddable public class TestId implements Serializable { private static final long serialVersionUID = -1875863517212408875L; private Integer id; private Date date; //getter、setter方法省略 @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final <span style="font-family:Arial, Helvetica, sans-serif;">TestId </span><span style="font-family:Arial, Helvetica, sans-serif;">other = (TestId) obj;</span> if (id == other.id && date == other.date) return true; return false; } @Override public int hashCode() { int result = id.hashCode() + date.hashCode(); return result; } }
3. 创建POJO类(与数据库对应)
注意@IdClass(TestId.class)
@Entity @IdClass(TestId.class) @Table(name = "test") public class Test { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Id @Column(name = "date") private Date date; @Column(name = "desc") private String desc; //getters and setters }
4. 测试增删改查
注意如果单单定义POJO类,那么在update的时候会出现“Duplicate ‘’ primary key”这种诡异的错误,定义好联合主键后,增删改查操作全部正常进行,这里以Spring+hibernate的方式为例
@Resource(name = "sessionFactory") protected SessionFactory sessionFactory; protected Session getSession() { return sessionFactory.getCurrentSession(); } //增 public Serializable save(Test t){ getSession().save(t); } //删 publc void delete(Test t){ getSession().delete(t); } //改 public void update(Test t){ getSession().update(t); } //查 public Test getTestById(TestId tId){ getSession().load(tId); }
注:如果测试中发现问题欢迎在下方提问,大家一起讨论
相关文章推荐
- 共享内存是最快的一种IPC方式
- 我的互联网金融行业经验总结
- saltstack之定时管理
- 继承CListCtrl,然后重载OnLButtonUP消息,发现变成双击才触发???
- 此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。
- Win8系统在同一个窗口不能打开新文件夹的三种解决方法
- Netty4 之 简单搭建WebSocket服务
- 以遍历的形式读取HBase数据库
- 关于php中反射类的简单理解:如何拿到一个类的所有方法(public+protected+private)
- 登录 ftp服务器
- ubuntu文件管理常用命令
- ubuntu文件管理常用命令
- leetcode Swap Nodes in Pairs 链表
- linux下查看进程和端口
- 升级 Mellanox ConnectX-3 EN 10/40 Gbps 网卡固件
- ubuntu文件管理常用命令
- 分布的拟合和检验
- J.U.C atomic AtomicInteger解析
- ubuntu文件管理常用命令 分类: linux ubuntu 学习笔记 2015-07-02 16:57 29人阅读 评论(0) 收藏
- 【转】Sublime text 3 中文文件名显示方框怎么解决