Hibernate之复合主键映射
一,概述
复合主键也是开发中经常遇到的需求,这篇博客就是关于复合主键映射,开始吧!
二,实体类准备
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之复合主键映射相关推荐
- Hibernate的复合主键映射
1>.学过hibernate的都知道用<id>来配置主键生成策略,显然,它只能配置主键是单列的表,对于联合主键的情况<id>就无能为力了.今天翻到个复合主键映射的资料,觉 ...
- NHibernate Mapping Attribute实现复合主键映射
当我在学习使用NHibernate Mapping Attribute的时候,遇到复合主键映射问题,查询了很多资料,也向朋友请教过,由于相关资料不多,中间走了些弯路,好在最终较好解决了,现记录分享如下 ...
- Hibernate复合主键映射
目录: 1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用 在日常开发中会遇到这样一种情况,数据库中的某张 ...
- hibernate中表的复合主键映射表
成绩表Cj:学号和课程号是复合主键 映射文件Cj.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mappi ...
- mapper中mysql复合语句_MyBatis定义复合主键
前为别名后为主查询getXXX语句中字段 SELECT colid,colname FROM table1 SELECT * FROM table2 WHERE id = #{id} AND name ...
- hibernate之初学复合主键
Jar包什么的就看前面几篇文章,接下来介绍复合主键知识 首先是hibernate的配置文件hibernate,cfg.xml基本没有什么变化 <!DOCTYPE hibernate-config ...
- Oracle-No.04 Oracle视图加主键解决hibernate复合主键问题
2019独角兽企业重金招聘Python工程师标准>>> Oracle视图默认是没有主键的,因此在用hibernate反向生成java类时,会自动采用复合主键,多生成一个类名+ID的类 ...
- Hibenate主键映射和Hibernate常用的标示生成器
l Hibenate主键映射 自然主键:充当主键的字段具有一定的含义,是构成记录的组成部分. 代理主键:充当主键的字段本身没有什么含义 Hibernate常用的标示生成器 标示生成器名称 描述 As ...
- 对逻辑主键、业务主键和复合主键的思考
这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论,相关讨论可以看最下面的参考链接.下面是自己基于 SQL Server 做的一些总结,其他数据库(Oracle.MySQ ...
- SpringData JPA复合主键
一.JPA和复合主键的简介 JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系, ...
最新文章
- JavaEE程序员必读图书大推荐 .
- 常考题 | IoU 计算
- VS中添加lib文件,编译出错:LINK : fatal error LNK1104: 无法打开文件:×××.lib解决办法
- 三年0故障是如何做到的?
- capture 原理图添加pcb封装_Altium Designer18制作两层PCB入门
- confusion_matrix(混淆矩阵)
- 每日一笑 | 一些关于集合的知识
- ActiveMQ_Windows版本的安装部署
- Iocomp控件教程之LinearGauge--线性刻度尺控件
- ad如何计算电路板的pin数量_PCB厂一到八层电路板的叠层设计方式
- FPGA实现的线性反馈移位寄存器LFSR
- 微博注册页面html,微博静态模板html
- 常见通信RF指标的内在和意义
- Easyrecovery13 for mac 官方版下载
- 重庆拟与惠普成立共同基金 打造中国西部“硅谷”
- 2020年国外安卓应用上线上架应用市场渠道详细步骤介绍(关键词:APP,apk,发布,Google Play,Android,流程)
- Oracle10g ora12170,ORA-3136、TNS-12535 12170 12606
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxxxx
- 挖掘肖特基二极管保护电路的小窍门
- Explaining and Harnessing Adversarial Examples