- 浏览: 154868 次
- 性别:
- 来自: 大连
-
文章分类
最新评论
-
fddjxllren:
session.find()是不支持动态绑定参数的.要使用it ...
Hibernate查询之list/iterator -
xiaofeiyang:
http://svn.apache.org/repos/asf ...
struts,hibernate,spring 版本控制svn的URL地址 -
peterxiemin:
emp在建立的时候,报无效的月份,为什么 ?
oracle的练习表---employee -
java_bigniu:
...
Hibernate查询之list/iterator -
lanhai921:
学习下,谢谢分享。
itext基本用法
UserType是一个Hibernate提供的一个 接口,可以用它来自定义类型;写个简单的例子,用户有Email属性,当然为了安全考虑,我们可以允许用户设定多个email,也可以独立建立一个email,然后将其和user关联起来,但是仅仅为了一个属性,就建立一个表,从系统分配的角度来看,这样很浪费;那么我们需要自定义一个类型;看下联系的实例:
EmailList:
package com.keith; import java.io.Serializable; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.usertype.UserType; public class EmailList implements UserType,java.io.Serializable { private List emails; private static final String SPLITTER = ";"; public int[] sqlTypes() { return new int[] { Hibernate.STRING.sqlType() }; } /** 从二级缓存中取这个对象数据时要调用的方法 */ public Object assemble(Serializable arg0, Object arg1) throws HibernateException { return arg0; } /** hibernate把这个数据放入二级缓存时要调用的方法 */ public Serializable disassemble(Object arg0) throws HibernateException { return (Serializable) arg0; } /** 这是用于Hibernate缓存生成的快照 */ public Object deepCopy(Object value) throws HibernateException { List sourcelist = (List) value; List targetlist = new ArrayList(); targetlist.addAll(sourcelist); return targetlist; } public boolean equals(Object x, Object y) throws HibernateException { if (x == y) return true; if (x != null && y != null) { List xList = (List) x; List yList = (List) y; if (xList.size() != yList.size()) return false; for (int i = 0; i < xList.size(); i++) { String str1 = (String) xList.get(i); String str2 = (String) yList.get(i); if (!str1.equals(str2)) return false; } return true; } return false; } public int hashCode(Object arg0) throws HibernateException { return arg0.hashCode(); } /** 告诉hibernate这个类型是不可变的。有微小的性能优化 */ public boolean isMutable() { return false; } /** 从JDBC的ResultSet读取属性值。这个方法是在从数据库查询数据时用到。 */ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException { String value = (String) Hibernate.STRING.nullSafeGet(rs, names[0]); if (value != null) { return parse(value); } else { return null; } } /** 将属性的值设置到PreparedStatement。 */ public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException { // System.out.println("Set method excecuted"); if (value != null) { String str = assemble((List) value); Hibernate.STRING.nullSafeSet(st, str, index); } else { Hibernate.STRING.nullSafeSet(st, value, index); } } /** 处理脱管对象状态的合并。 */ public Object replace(Object original, Object target, Object owner) throws HibernateException { return original; } /** 告诉Hibernate这个UserType用来映射的数据类型。 */ public Class returnedClass() { return List.class; } private String assemble(List list) { StringBuffer strBuf = new StringBuffer(); if (list.size() > 1) { for (int i = 0; i < list.size() - 1; i++) { strBuf.append(list.get(i)).append(SPLITTER); } strBuf.append(list.get(list.size() - 1)); } else if (list.size() == 1) { strBuf.append(list.get(0)); } return strBuf.toString(); } private List parse(String value) { String[] strs = StringUtils.split(value, SPLITTER); List emailList = new ArrayList(); for (int i = 0; i < strs.length; i++) { emailList.add(strs[i]); } return emailList; } }
Tuser:
package com.keith; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class Tuser implements Serializable { private Integer uId; private String uName; private List email = new ArrayList(); public Tuser() { } public List getEmail() { return email; } public void setEmail(List email) { this.email = email; } public Integer getuId() { return uId; } public void setuId(Integer uId) { this.uId = uId; } public String getuName() { return uName; } public void setuName(String uName) { this.uName = uName; } }
Tuser.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.keith"> <class name="Tuser" table="tUser"> <id name="uId" column="uId"> <generator class="native" /> </id> <property name="uName" column="uName"/> <property name="email" type="com.keith.EmailList"></property> </class> </hibernate-mapping>
测试代码:
Tuser tUser = new Tuser(); tUser.setuName("keith"); List email = new ArrayList(); email.add("keith@gmail.com"); email.add("keith@sina.coom"); tUser.setEmail(email); session.save(tUser); session.getTransaction().commit();看下数据库;
发表评论
-
Hibernate之分页
2011-01-09 17:30 918在Hibernate中,通过对不同数据库的统一接口设计,实现了 ... -
hibernate之结果集排序
2011-01-09 17:07 1354无序集和有序集,是针对hibernate数据持久过程中,是否保 ... -
hibernate之Collection类型
2011-01-09 16:42 1465Collection类型: ... -
Hibernate之海量数据操作
2011-01-09 09:59 1075批量添加 在实 ... -
hibernate之数据存储
2011-01-07 16:33 7341,session.save(); 方法用于实体对象到数 ... -
hibernate之延迟加载(Lazy Loading)
2011-01-07 15:43 1210避免在某些情况下,关 ... -
Hibernate查询之list/iterator
2011-01-07 14:13 6367在Hibernate3中将Session.find(),Ses ... -
Hibernate之查询缓存(The Query Cache)
2011-01-07 09:21 1043查询的结果集也可以被缓存。只有当经常使用同样的参数进行查询时, ... -
hibernate之数据加载---Session.get/load
2011-01-06 16:54 1005Session.get/load() 都是根 ... -
hibernate之乐观锁(Optimistic Locking)
2011-01-06 16:34 1675相对于悲观锁,乐观锁采取了更加宽松的加锁机制,悲观锁大多数是依 ... -
Hibenate之悲观锁(Pessimistic Locking)
2011-01-06 15:34 1384什么是“锁”? 业务逻辑的实现过程中,往往需要保证数据的排他 ... -
Hibernate之事务管理
2011-01-06 15:00 829Hibernate是JDBC的轻量级封装,本身不具备事务管理能 ... -
初识---事务管理
2011-01-06 14:28 811何为“ 事务管理 ”? ... -
Hibernate之缓存同步策略
2011-01-06 13:43 1319缓存同步决定了数据对 ... -
Hibernate之数据缓存
2011-01-06 11:22 1105Hibernate数据缓存(cache ... -
认识数据缓存
2011-01-06 10:36 964数据缓存概述:在特定硬件基础上,缓存(Cache)往往是提升系 ... -
hibernate之脏数据检查
2011-01-06 09:54 2361HIbernate中有个名词---脏数据(dirty Data ... -
hibernate之实体对象生命周期
2011-01-06 09:16 1003在Hibernate的应用中,实体对象的生命周期,是一个关键的 ... -
Hibernate之数据加载方式
2011-01-05 23:09 1134Hibernate 的数据加载方式: 在JDBC的操作中,利 ... -
Hibenrate之多对多关联
2010-12-31 16:39 1132Hibernate多对多关联可以分成单向和双向,多对多关系会借 ...
相关推荐
### 枚举类型在switch语句中的用法 在编程语言中,枚举(Enum)是一种数据类型,它由一组固定的常量组成,通常用于表示有限的预定义值集。枚举类型的使用可以让代码更加清晰易读,并且有助于减少错误的发生。在本篇...
【J2EE企业级项目开发-1期 04 Hibernate使用经验】 在J2EE企业级项目开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,被广泛用于简化数据库操作。以下是一些关于Hibernate使用的重要经验和技巧: 1. **...
例如,如果需要创建一个特殊的树形视图节点,我们可以定义一个类型值为`QTreeWidgetItem.UserType + 1`的QTreeWidgetItem,然后在处理视图逻辑时,可以根据这个自定义的类型值来进行特殊的操作。 除了`type`参数外...
使用方法: 1.建立名字叫做"usertype.dat"的纯文本文件, 把以下关键字Copy到里面,一个关键字一行. 2.把此文件放到和VS IDE同目录下.(..\Microsoft Visual Studio X.0\Common7\IDE\) 3.打开VS, TOOL->OPTION-...
1. **创建动态扩展的基类**:定义一个基类,它继承自Hibernate的`AbstractEntityPersister`或`AbstractEntityInheritancePersister`,并实现必要的方法,如`propertyTypes`、`getIdentifierProperty`等,以便...
这些方法都是 UserType 接口的必备方法,其中 nullSafeGet 方法用于从 ResultSet 中获取 LONG 类型字段的值,而 deepCopy 方法用于深度拷贝 LONG 类型字段的值。 在 Hibernate 框架中,我们可以使用自定义类型来...
Java 枚举类型在 switch 语句正确使用方法详解 Java 枚举类型是 Java 语言中的一种特殊类型,用于定义一组具有一些公共特征的常量。Java 枚举类型在 switch 语句中的正确使用方法是本文的主要内容。通过示例代码,...
本文档将详细介绍DataBinding2的核心功能及其使用方法。 #### 二、基本概念 在使用DataBinding2之前,我们首先需要理解几个基本的概念: 1. **数据绑定**:指的是将HTML元素(如`<td>`、`<input>`等)与后端返回...
此外,为了方便使用,日志类可能还包含各种方法,如info()、debug()、warn()、error()等,分别对应不同级别的日志,便于用户根据需要调整日志级别。这些方法内部可能会根据日志级别控制是否实际写入日志,以及写入的...
这里使用`struct`来创建一个名为`list`的结构体类型,并为其添加两个成员:一个`UserType`类型的`key`用于存储数据;一个指向同类型结构体的指针`next`,用于连接下一个节点。 ```c struct list { UserType key...
在这个例子中,UserType代表了User模型,Query类包含了返回所有用户的方法。然后,这些定义可以通过`graphene.Schema`创建一个完整的GraphQL API。 此外,graphene-django还支持异步操作,这在处理大量数据或者需要...
在本实例“Listwidget控件实例1”中,我们将深入探讨`QListWidget`的使用方法,以及如何在实际应用中有效地利用它。 `QListWidget`是Qt库中的一个类,它继承自`QWidget`,并且实现了`QAbstractItemView`的接口。这...
2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 实体域对象的其他持久化模式 2.3.1 主动域对象模式 2.3.2 JDO模式 2.3.3 CMP模式 2.4 Hibernate API简介 2.4.1 Hibernate的核心接口 ...
Axios 使用拦截器统一处理所有的 HTTP 请求的方法 Axios 是一个基于 Promise 的 HTTP 客户端库,它提供了拦截器机制来统一处理所有的 HTTP 请求。本文将详细介绍 Axios 使用拦截器统一处理所有的 HTTP 请求的方法,...
1. **使用IGNORE INTO关键字**: 在MySQL中,当你尝试插入的数据违反了唯一索引约束时,可以使用`INSERT IGNORE`或`REPLACE INTO`语句。`INSERT IGNORE`会忽略违反唯一索引的行,不抛出错误,而是简单地跳过这些行...
下面将详细介绍这个类的结构、功能和使用方法。 首先,从代码中可以看出,这个类采用单例模式设计,确保在整个应用中只有一个`include_purview`类的实例存在。通过定义`getInstance()`方法,我们可以获取到这个唯一...
2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 实体域对象的其他持久化模式 2.3.1 主动域对象模式 2.3.2 JDO模式 2.3.3 CMP模式 2.4 Hibernate API简介 2.4.1 Hibernate的核心接口 ...
1. 实现`UserType`接口:这是最常见的自定义类型实现方式。`UserType`提供了对Java对象和数据库列之间转换的一系列方法,包括获取SQL类型的数组(`sqlTypes()`)、返回对象的Java类(`returnedClass()`)、比较两个...
2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 实体域对象的其他持久化模式 2.3.1 主动域对象模式 2.3.2 JDO模式 2.3.3 CMP模式 2.4 Hibernate API简介 2.4.1 Hibernate的核心接口 ...