如果需要直接将持久类的多列映射成联合主键,则该持久化类必须满足如下条件:

1)        有无参数的构造器。

2)        必须实现java.io.Serializeble接口。

3)        建议正确地重写equals()和hashCode()方法,也就是根据组件类的关键属性来区分组件对象。

下面是一个Person的类。

@Entity
@Table(name="person_inf")
public class Personimplements java.io.Serializable
{// 定义first属性,作为标识属性的成员@Idprivate String first;// 定义last属性,作为标识属性的成员@Idprivate String last;private int age;// first的setter和getter方法public void setFirst(String first){this.first = first;}public String getFirst(){return this.first;}// last的setter和getter方法public void setLast(String last){this.last = last;}public String getLast(){return this.last;}// age的setter和getter方法public void setAge(int age){this.age = age;}public int getAge(){return this.age;}// 重写equals()方法,根据first、last进行判断public boolean equals(Object obj){if (this == obj){return true;}if (obj != null && obj.getClass() == Person.class){Person target = (Person)obj;return target.getFirst().equals(getFirst())&& target.getLast().equals(getLast());}return false;}// 重写hashCode()方法,根据first、last计算hashCode值public int hashCode(){return getFirst().hashCode() * 31+ getLast().hashCode();}
}

下面是执行用的类:

public class PersonManager
{public static void main(String[] args){PersonManager mgr = new PersonManager();mgr.createAndStorePerson();HibernateUtil.sessionFactory.close();}private void createAndStorePerson(){Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();// 创建Person对象Person person = new Person();person.setAge(29);person.setFirst("owen.org");person.setLast("Hibernate");session.save(person);tx.commit();HibernateUtil.closeSession();}
}

结果图:

Hibernate多列作为联合主键(六)相关推荐

  1. JPA/Hibernate实体类定义联合主键@IdClass注解的使用

  2. Mysql 主键 联合主键 索引 唯一索引 被抠细节问死的问题

    1.一张表中可以有几个主键? 答:一个. 2.那联合主键是什么? 答:一张表多个主键,就是联合主键,可以由多个列形成联合主键,但是主键只能有一个 3.主键作用是什么? 答:主键的作用是保证数据的唯一性 ...

  3. Oracle中主键和唯一索引的区别oracle中联合主键的作用

    在创建主键的同时会生成对应的唯一索引,主键在保证数据唯一性的同时不允许为空, 而唯一索引可以有一个为空的数据项,一个表中只能有一个主键,但是一个主键可以有多个字段,一个表中可以有多个唯一索引. 联合主 ...

  4. Oracle主键和联合主键

    在oracle数据库中,一张表中的每一行数据被称为一条记录.一条记录通常都是由多个字段所组成的. 例如,employees表的四行记录: 每一条记录都包含者若干个已经定义好的字段.同一个表的所有记录都 ...

  5. Java实体类设置联合主键_javahibernate使用注解来定义联合主键

    java hibernate使用注解来定义联合主键 下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键 下面取至hibern ...

  6. hibernate 联合主键 merge

    http://topic.csdn.net/u/20090722/16/1946dd91-3900-47e9-ab85-ed7db41252de.html Object obj=session.mer ...

  7. Hibernate中用到联合主键的使用方法,为何要序列化,为何要重写hashcode 和 equals 方法...

    联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为 ...

  8. hibernate联合主键

    2019独角兽企业重金招聘Python工程师标准>>> 在日常开发中,有时候会出现要求两个或以上字段联合做主键的表,就两个字段做主键为例,用户表的联合主键为firstname和las ...

  9. 自底向上带你逆向解析hibernate联合主键

    参考1.参考2 文章目录 1 最后生成具有复合主键的表 2 People.hbm.xml文件 3 配置映射 4 java类 5 action中联合主键赋值方式 1 最后生成具有复合主键的表 数据库表的 ...

  10. hibernate 联合主键

    xml方式处理联合主键: 以有两个主键:id和name的student表为例. 先创建个主键类: package com.bjsxt.hibernate; //黑色为必写项 public class ...

最新文章

  1. ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1
  2. 机器学习预测地震的未来
  3. 基于旋转轮廓的点云局部浮点型和二值化特征描述(RCS)
  4. Linux下history命令详解---转载
  5. php mysql查询例子_php mysql一个查询优化的简单例子
  6. 机器学习分类模型评价指标和方法
  7. win32com 读取excel
  8. 2D Game Creation - 2D游戏开发基本流程
  9. Google搜索引擎设置百度搜索
  10. 记微信小程序动态表单实现
  11. 翡翠手链更能够突显佩戴者的非凡气质
  12. Android Studio实现数独小游戏,休闲益智
  13. Zigbee安全概述
  14. 8的倍数——题解(容斥原理)
  15. pytorch中的MSELoss函数
  16. 用c语言编写程序,求∑(k=1~100)k+∑(k=1~50)k2,c语言程序,求(100∑k=1 k)+(50∑k=1 k^2)+(10∑k=1 1/k) 这...
  17. 联发科发布全新旗舰5G芯片;全球半数雇主计划加薪并恢复至正常招聘水平 | 美通企业日报...
  18. 刘慈欣回应《三体》获奖nbsp;对…
  19. 【Android 10 源码】深入理解 Omx 初始化
  20. PHP语言Laravel9+Layui搭建的系统后台框架

热门文章

  1. PageStateLayout
  2. Debian - 搭建Debian本地APT源
  3. 关于CocosStudioV3.10的场景导入Cocos2d-xV3.17.2场景未发生变化的解决方案
  4. Security+ 学习笔记47 事件响应方案
  5. PPP协议基础与工作流程
  6. MySQL读写分离详解(二)——MyCAT实战配置
  7. IS-IS详解(三)——IS-IS 报文结构与功能
  8. C++ vector和stack入门习题(采用排序)
  9. 通过一个视频剖析数据可视化的秘密
  10. Linux下如何编写和使用自定义的Shell函数和函数库