Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)
Clob:文本大对象,最长4G
Blob:二进制数据大对象,最长4G
util:
public class HibUtil {
private static SessionFactory sessionFactory;
static{
//获取配置信息 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
//创建一个 ServiceRegistry的实例
//首先获得其标准建造器,此处用了建造者模式 builder模式来创建对象
//创建一个标准的构建器
StandardServiceRegistryBuilder ssb = new StandardServiceRegistryBuilder();
//建造(得到)ServiceRegistry的实例此处一定要传入//configuration.getProperties()否则会报错UnsupportedOperationException
ServiceRegistry build = ssb.applySettings(configuration.getProperties()).build();
//获得session工厂 一个数据库对应一个 SessionFactory
sessionFactory = configuration.buildSessionFactory(build);
}
public static Session getSession(){
return sessionFactory.openSession();
}
public static void main(String[] args) {
}
}
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.dialect">
org.hibernate.dialect.Oracle10gDialect
</property>
<property name="hibernate.connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">tiger</property>
<property name="hibernate.connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<!-- 2: 全局性配置 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 仅供测试时使用 ,公司内禁止使用 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 3: 映射文件的配置 -->
<mapping resource="com/huawei/hib/po/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
po:
public class Address {
private Integer addrId;
private String addrName;
public Integer getAddrId() {
return addrId;
}
public void setAddrId(Integer addrId) {
this.addrId = addrId;
}
public String getAddrName() {
return addrName;
}
public void setAddrName(String addrName) {
this.addrName = addrName;
}
}
public class PersonName {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
import java.sql.Blob;
import java.sql.Clob;
public class Person {
private PersonName personName;
private Integer age;
private Clob txtObj;
private Blob imgObj;
private Address address;
public PersonName getPersonName() {
return personName;
}
public void setPersonName(PersonName personName) {
this.personName = personName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Clob getTxtObj() {
return txtObj;
}
public void setTxtObj(Clob txtObj) {
this.txtObj = txtObj;
}
public Blob getImgObj() {
return imgObj;
}
public void setImgObj(Blob imgObj) {
this.imgObj = imgObj;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Person.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="com.huawei.hib.po">
<class name="Person" table="test_person" >
<!-- 联合主键映射 -->
<composite-id name="personName" class="PersonName">
<key-property name="firstName" column="first_name" />
<key-property name="lastName" column="last_name" />
</composite-id>
<property name="age" />
<property name="txtObj" column="txt_Obj" />
<property name="imgObj" column="img_Obj" />
<!--组合关系映射 -->
<component name="address" class="Address">
<property name="addrId" column="addr_id" />
<property name="addrName" column="addr_name" />
</component>
</class>
</hibernate-mapping>
dao:
public class PersonDao {
public static void main(String[] args) throws FileNotFoundException {
Session session = HibUtil.getSession();
Address address = new Address();
address.setAddrId(1);
address.setAddrName("成都");
PersonName personName = new PersonName();
personName.setFirstName("三");
personName.setLastName("张");
Person p = new Person();
p.setPersonName(personName);
p.setAge(20);
Blob imgObj = Hibernate.getLobCreator(session).createBlob(new FileInputStream("E:/123.jpg"),1200000);
Clob txtObj = Hibernate.getLobCreator(session).createClob("成都是个美丽的地方");
p.setTxtObj(txtObj);
p.setImgObj(imgObj);
p.setAddress(address);
Transaction tx = session.beginTransaction();
session.save(p);
tx.commit();
session.close();
}
}
Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)的更多相关文章
- hibernate里联合主键composite-id映射,查询单个主键的问题
今天项目中遇到这个问题,搞了大半天,现在记录下来hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbW ...
- hibernate 注解 联合主键映射
联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...
- hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同
基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...
- hibernate MTM 联合主键
//适用于表里没有其他列,只有主键 //Course.java实体类 package com.tao.pojo; import java.util.HashSet; import java.util. ...
- Hibernate中的主键生成器generator
本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. [xhtml] view plaincopy <c ...
- hibernate中复合主键的使用
转: https://blog.csdn.net/shutingwang/article/details/6627730 https://blog.csdn.net/lmy86263/article/ ...
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...
- Java进阶知识05 Hibernate联合主键之Annotation(注解)和XML实现方式
1.Hibernate联合主键(Annotation实现) 1.1.单列主键 1.1.1.为什么要有主键? //唯一确定一条记录 1.1.2.一个表能否有多个主键? //不能 1.1.3. ...
随机推荐
- R(4) read/write
write.table() 数据导入导出最常用的方式是使用read.table()函数和write.table()处理CSV文件的导入导出,read.table()和write.table()可以处理 ...
- MySQL集群Percona XtraDB Cluster安装搭建步骤详解
http://www.linuxidc.com/Linux/2017-05/143501.htm http://blog.csdn.net/thundermeng/article/details/52 ...
- thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5
前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了 ...
- 【转】asp.net mvc css/js压缩合并 --- combres
转自:http://www.cnblogs.com/zxktxj/archive/2012/05/30/2526246.html NuGet 网站:http://nuget.codeplex.co ...
- PAT 乙级 1038 统计同成绩的学生C++版
1038. 统计同成绩学生(20) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求读入N名学生的成绩,将 ...
- request笔记记录
1.https请求报错解决方法,添加verify=False参数 r = requests.get(json=payload, headers=headers,verify=False) 1)由于这里 ...
- [转]IIS 允许/禁止 目录浏览
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.we ...
- 关于跨域读取json数据我的理解
这两天在做关于读取json数据的插件,想用getJSON读取数据: $.getJSON(http://www.xxxx.com/Titles.js, function (data) { console ...
- 字符串拼接和dom回流
以对象的角度分析 对象的两方面 属性和方法 研究对象,主要是研究对象的属性和方法 案例: <ul id="list"> <li></li> & ...
- matplot 代码实例
matplot 代码实例 #!/usr/bin/env python # coding=utf-8 import numpy as np import matplotlib.pyplot as plt ...