一,概述

复合主键也是开发中经常遇到的需求,这篇博客就是关于复合主键映射,开始吧!

二,实体类准备

1)复合主键类

package com.bighuan.d_compositeKey;import java.io.Serializable;/*** 复合主键类:用户名和地址唯一标识一条记录* * @author bighuan* */
public class CompositeKeys implements Serializable {private String userName;private String address;public CompositeKeys() {}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}

2)表对应的实体类User.java

package com.bighuan.d_compositeKey;public class User {public User() {}private int age;private CompositeKeys keys;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public CompositeKeys getKeys() {return keys;}public void setKeys(CompositeKeys keys) {this.keys = keys;}}

三,配置文件准备

1)User.java对应的映射文件User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.bighuan.d_compositeKey"auto-import="true"><class name="User"><!-- 复合主键映射 --><composite-id name="keys"><key-property name="userName" type="string"></key-property><key-property name="address" type="string"></key-property></composite-id><property name="age" type="int"></property></class></hibernate-mapping>

配置复合主键主要是通过<composite-id>来完成!

2)hibernate.cfg.xml(上一篇博客粘贴过这个文件,多复制一遍,加深印象)

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!--1, 数据库连接配置 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hib_demo</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">abc</property><!--2, 数据库方法配置:告诉hibernate使用的是什么数据库 --><!-- hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql --><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><!--3, 其他相关配置:3.1展示hibernate在运行时执行的sql语句--><property name="hibernate.show_sql">true</property><!-- 3.2格式化sql语句配置 --><property name="hibernate.format_sql">true</property><!-- 3.3自动建表 ,先删除后创建,不管有没有表--><!-- <property name="hibernate.hbm2ddl.auto">create</property> --><!-- 3.4有表就不创建,反之就创建 --><property name="hibernate.hbm2ddl.auto">update</property> <!--映射配置:  加载所有映射 --><mapping resource="com/bighuan/d_compositeKey/User.hbm.xml"/></session-factory>
</hibernate-configuration>

四,测试

1)插入数据,查询数据

package com.bighuan.d_compositeKey;import java.util.Date;import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;public class App2 {private static SessionFactory sf = null;static {sf = new Configuration().configure().buildSessionFactory();}@Testpublic void testSave() throws Exception {// 创建对象CompositeKeys keys = new CompositeKeys();keys.setUserName("bighuan");keys.setAddress("江西南昌2");User user = new User();user.setAge(25);user.setKeys(keys);// 创建session(代表一个与数据库连接的会话)org.hibernate.Session session = sf.openSession();// 4,开启事务Transaction tx = session.beginTransaction();// 5,保存数据session.save(user);tx.commit();// 7,关闭session.close();}@Testpublic void testQuery() throws Exception {// 创建对象CompositeKeys keys = new CompositeKeys();keys.setUserName("bighuan");keys.setAddress("江西南昌");// 创建session(代表一个与数据库连接的会话)org.hibernate.Session session = sf.openSession();// 4,开启事务Transaction tx = session.beginTransaction();// 5,查询数据User user = (User) session.get(User.class, keys);if (user != null) {System.out.println(user.getAge() + ","+ user.getKeys().getAddress() + ","+ user.getKeys().getUserName());}tx.commit();// 7,关闭session.close();}}

2)插入两条数据到数据库,数据库的user表

3)通过主键查询

25,江西南昌,bighuan

Hibernate之复合主键映射相关推荐

  1. Hibernate的复合主键映射

    1>.学过hibernate的都知道用<id>来配置主键生成策略,显然,它只能配置主键是单列的表,对于联合主键的情况<id>就无能为力了.今天翻到个复合主键映射的资料,觉 ...

  2. NHibernate Mapping Attribute实现复合主键映射

    当我在学习使用NHibernate Mapping Attribute的时候,遇到复合主键映射问题,查询了很多资料,也向朋友请教过,由于相关资料不多,中间走了些弯路,好在最终较好解决了,现记录分享如下 ...

  3. Hibernate复合主键映射

    目录: 1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用 在日常开发中会遇到这样一种情况,数据库中的某张 ...

  4. hibernate中表的复合主键映射表

    成绩表Cj:学号和课程号是复合主键 映射文件Cj.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mappi ...

  5. mapper中mysql复合语句_MyBatis定义复合主键

    前为别名后为主查询getXXX语句中字段 SELECT colid,colname FROM table1 SELECT * FROM table2 WHERE id = #{id} AND name ...

  6. hibernate之初学复合主键

    Jar包什么的就看前面几篇文章,接下来介绍复合主键知识 首先是hibernate的配置文件hibernate,cfg.xml基本没有什么变化 <!DOCTYPE hibernate-config ...

  7. Oracle-No.04 Oracle视图加主键解决hibernate复合主键问题

    2019独角兽企业重金招聘Python工程师标准>>> Oracle视图默认是没有主键的,因此在用hibernate反向生成java类时,会自动采用复合主键,多生成一个类名+ID的类 ...

  8. Hibenate主键映射和Hibernate常用的标示生成器

    l  Hibenate主键映射 自然主键:充当主键的字段具有一定的含义,是构成记录的组成部分. 代理主键:充当主键的字段本身没有什么含义 Hibernate常用的标示生成器 标示生成器名称 描述 As ...

  9. 对逻辑主键、业务主键和复合主键的思考

    这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论,相关讨论可以看最下面的参考链接.下面是自己基于 SQL Server 做的一些总结,其他数据库(Oracle.MySQ ...

  10. SpringData JPA复合主键

    一.JPA和复合主键的简介        JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系, ...

最新文章

  1. JavaEE程序员必读图书大推荐 .
  2. 常考题 | IoU 计算
  3. VS中添加lib文件,编译出错:LINK : fatal error LNK1104: 无法打开文件:×××.lib解决办法
  4. 三年0故障是如何做到的?
  5. capture 原理图添加pcb封装_Altium Designer18制作两层PCB入门
  6. confusion_matrix(混淆矩阵)
  7. 每日一笑 | 一些关于集合的知识
  8. ActiveMQ_Windows版本的安装部署
  9. Iocomp控件教程之LinearGauge--线性刻度尺控件
  10. ad如何计算电路板的pin数量_PCB厂一到八层电路板的叠层设计方式
  11. FPGA实现的线性反馈移位寄存器LFSR
  12. 微博注册页面html,微博静态模板html
  13. 常见通信RF指标的内在和意义
  14. Easyrecovery13 for mac 官方版下载
  15. 重庆拟与惠普成立共同基金 打造中国西部“硅谷”
  16. 2020年国外安卓应用上线上架应用市场渠道详细步骤介绍(关键词:APP,apk,发布,Google Play,Android,流程)
  17. Oracle10g ora12170,ORA-3136、TNS-12535 12170 12606
  18. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxxxx
  19. 挖掘肖特基二极管保护电路的小窍门
  20. Explaining and Harnessing Adversarial Examples

热门文章

  1. opencv python 鼠标响应操作
  2. C#用正则表达式 获取网页源代码标签的属性或值
  3. NEsper Nuget包
  4. 读SUCH AMERCAN和贾平凹的画集
  5. Wifi 与 2G/3G
  6. 8.Linux性能诊断 --- 浅谈基于数据分析的网络态势感知
  7. 15.go install
  8. 8.XSD 复合元素
  9. 前端面试宝典(1)——HTMLCSS
  10. RabbitMQ实战:理解消息通信