- 浏览: 642400 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
lizhuang:
这个方法的内部实现主要是依赖于类加载器,一般的自己实现的类是用 ...
Java中getResourceAsStream的用法 -
prince4426:
回答评论都很精彩
Java中getResourceAsStream的用法 -
kexuetou:
美人如此多娇 写道可能这样总结更好,路径前不带'/',则是相对 ...
Java中getResourceAsStream的用法 -
guoxin91:
...
Java中getResourceAsStream的用法 -
美人如此多娇:
可能这样总结更好,路径前不带'/',则是相对路径;若带,则是绝 ...
Java中getResourceAsStream的用法
HIbernate有两种方法来处理复合主键,第一种是基于实体类属性的复合主键,另一种是基于主键类的复合主键。在这里使用基于主键类的复合主键。
通常将复合主键相关属性,单独抽取出来,建立一个独立的类,这个类就是主键类,要求:
* 必须实现序列化(Serializable)接口
* 必须重写equals和hashcode方法
复合主键的值是一个主键类,而不是一个普通的常见数值,因此,复合主键在映射文件中采用<composite-id>标签进行标识,其它属性采用<property>正常映射。
建立一个主键类Timestamp,代码如下:
public class Timestamp implements Serializable{ private String date; private String time; public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getTime() { return time; } public void setTime(String time) { this.time = time } //重写equals方法 public boolean equals(Object other) { if(this == other) { return true; } if(other == null) { return false; } if(!(other instanceof Timestamp)) { return false; } Timestamp castOther = (Timestamp)other; //根据业务需要,设定比较条件 return ((this.getDate() == castOther.getDate()) || (this.getDate() != null && castOther.getDate() != null && this.getDate().equals(castOther.getDate()))) && ((this.getTime() == castOther.getTime()) || (this.getTime() != null && castOther.getTime() !=null && this.getTime().equals(castOther.getTime()))); } //重写hashCode()方法 public int hashCode() { int result = 17; result = 37 * result + (getDate() == null ? 0 : this.getDate().hashCode()); result = 37 * result + (getTime() == null ? 0 : this.getTime().hashCode()); return result; } }
建立以主键类Timestamp为其中一个属性的bean类,代码如下:
public class Message implements Serializable { private Timestamp timestamp; private String messageId; private String messageContent; public Timestamp getTimestamp() { return timestamp; } public void setTimestamp(Timestamp timestamp) { this.timestamp = timestamp; } public String getMessageId() { return messageId; } public void setMessageId(String messageId) { this.messageId = messageId; } public String getMessageContent() { return messageContent; } public void setMessageContent(String messageContent) { this.messageContent = messageContent; } }
建立映射文件Message.hbm.xml,并在hibernate.cfg.xml文件中加入该映射文件,Message.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> <class name="com.iprai.hibernate.Message" table="message"> <composite-id name="timestamp"> <key-property name="date" column="idate"/> <key-property name="time" column="itime"/> </composite-id> <property name="messageId" column="message_id"/> <property name="messageContent" column="message_content"/> </class> </hibernate-mapping>
编写JUnit测试代码如下:
import java.util.Date; import org.hibernate.Session; import junit.framework.TestCase; public class MessageTest extends TestCase { public void testSave() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //复合主键 Timestamp timestamp = new Timestamp(); timestamp.setDate("2009-12-05"); timestamp.setTime("17:01:23"); Message message = new Message(); //和主键建立关联 message.setTimestamp(message); message.setMessageId("01"); message.setMessageContent("JavaEye"); session.save(message); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad() { Session session = null; try { session = HibernateUtils.getSession(); //复合主键 Timestamp timestamp = new Timestamp(); timestamp.setDate("2009-12-05"); timestamp.setTime("17:01:23"); Message message = (Message)session.load(Message.class, timestamp); System.out.println("MessageId=" + message.getMessageId()); System.out.println("MessageContent=" + message.getMessageContent()); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } } }
发表评论
-
HTTP协议解析
2010-01-27 20:39 4543掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在 ... -
TOMCAT指定JDK
2010-01-14 17:13 2419在windows环境下以批处理文件方式启动tomcat,只要运 ... -
Struts2的国际化
2010-01-01 11:30 1164Struts2国际化分为三类: ... -
总结Struts2的经典输入校验
2009-12-30 16:59 21181,输入校验介绍 Struts2提供了功能强大的输入校验机制 ... -
浅谈Struts2的内建校验器
2009-12-30 16:16 1311Struts2已经为我们准备了一些内建校验器,我们可以直接使用 ... -
Struts2输入校验
2009-12-30 16:12 1648struts2的输入校验针对输入进行业务规则的校验,譬如是否必 ... -
Struts2拦截器原理
2009-12-27 21:02 33461. 什么是拦截器 拦截器,在AOP(Aspect-O ... -
Struts2多文件上传
2009-12-27 17:36 1395Struts2也可以很方便地实现多文件上传。 在输入表 ... -
Struts2文件上传
2009-12-27 16:52 15181.文件上传原理 表单元素的enctype属性指定 ... -
Struts2 访问request、session和application对象
2009-12-27 15:28 3870在传统的Web开发中,经常会用到Servlet API中的Ht ... -
Struts2类型转换
2009-12-26 23:01 1687一、 struts2类型转换一 1、struts2的类型转 ... -
Struts2请求参数的接收
2009-12-26 22:24 16341)--采用基本类型接收请求参数(get/post) ... -
Struts2动态方法调用
2009-12-26 16:48 4535Struts2支持动态方法调用,它指的是一 ... -
Struts2指定多个配置文件
2009-12-26 15:50 2901如果配置文件struts.xml的内容太多,或者是 ... -
Struts2命名空间
2009-12-26 15:24 1644Struts.xml命名空间规则 包的na ... -
Struts2框架的处理流程
2009-12-26 15:07 42701. Struts2架构图 请求首先通过F ... -
Struts2的常量详解
2009-12-26 11:43 3498通常struts2加载struts2常 ... -
HTML form包含的元素
2009-12-25 17:01 1799HTML form elements Object ... -
Struts2.1.x快速入门(二)
2009-12-23 20:02 1188------------------------------- ... -
Struts2.1.x快速入门(一)
2009-12-23 17:21 1225------------------------------- ...
相关推荐
《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...
复合主键映射 <br>通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 ...
请更名为 Hibernate复合主键.part2.rar
更名为 Hibernate复合主键.part3.rar
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 ...
本篇文章将深入探讨Hibernate如何支持和管理复合主键。 一、理解复合主键 在数据库设计中,复合主键是一种特殊情况,当单个字段不能唯一标识表中的每一行时,可以使用两个或多个字段的组合来创建唯一的标识。例如...
本章讲解Hibernate中对数据库复合主键的支持
通过以上的解释,我们可以看到,虽然无主键表在数据库中并不常见,但在某些特定场景下,如复合主键,Hibernate提供了一套完整的解决方案。所提供的资源包括一个简单的Demo,可以实际运行并理解无主键表映射的实现...
博文链接:https://balaschen.iteye.com/blog/155127
在Java的Hibernate框架中,复合主键映射是一种处理多列组合成主键的情况,它使得在数据库表中由两个或更多个字段组成的主键能够被正确地映射到实体类。在使用复合主键时,我们需要遵循一定的步骤和规则。 首先,...
复合主键关联映射则是处理具有多个字段作为主键的表与对象之间的映射。 通过理解这些知识点,开发者可以更有效地利用Hibernate框架来开发复杂的企业级应用,处理数据持久化以及对象和关系数据库之间的映射。...
如果使用Hibernate开发legacy的数据库应用,对于数据库表中有使用字符串作为主键或者使用复合主键情况,那么对于这些情况的影射档是比较麻烦的。该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM...