复合(联合)主键映射
通常将复合主键相关的属性,单独放到一个类中
* 此类必须实现序列化接口 implements java.io.Serializable
* 覆写hashcode和equals方法
类:
import java.io.Serializable;
public classNamePK implements Serializable{ //主键类
private static final long serialVersionUID = 8313037022835155821L;
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;
}
//重写,交给eclipse自己来写,source/generator hashCode() and equals()
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((firstName == null) ? 0 : firstName.hashCode());
result = PRIME * result + ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
//重写,交给eclipse自己来写
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final NamePK other = (NamePK) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
}
public classUserInfo{
privateNamePK namePk;
private String sex;
private int age;
}
hbm.xml
UserInfo.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zd.model">
<class name="UserInfo" table="user_info" >
<composite-id name="namePk">
<key-property name="firstName" column="first_name" length="12"/>
<key-property name="lastName" column="last_name" length="12"/>
</composite-id>
<property name="sex" length="12"/>
<property name="age" />
</class>
</hibernate-mapping>
测试用例:
public void testCompositeId(){
Session session = null;
Transaction ta = null;
try{
session = HibernateUtil.getSession();
ta = session.beginTransaction();
NamePK namePk = new NamePK();
namePk.setFirstName("Zhang");
namePk.setLastName("san");
UserInfo ui = new UserInfo();
ui.setNamePk(namePk);
ui.setSex("M");
ui.setAge(12);
session.save(ui);
ta.commit();
}catch(Exception e){
e.printStackTrace();
if(ta != null){
ta.rollback();
}
}finally{
//关闭session, user变为detached离线对象
HibernateUtil.closeSession(session);
}
}
public void testgetId(){
Session session = null;
Transaction ta = null;
try{
session = HibernateUtil.getSession();
ta = session.beginTransaction();
NamePK namePk = new NamePK();
namePk.setFirstName("Zhang");
namePk.setLastName("san");
UserInfo ui = (UserInfo) session.get(UserInfo.class, namePk); //get or load均是要序列化的类,所以要把主键implements Serializable
System.out.println(ui.getAge());
System.out.println(ui.getSex());
ta.commit();
}catch(Exception e){
e.printStackTrace();
if(ta != null){
ta.rollback();
}
}finally{
//关闭session, user变为detached离线对象
HibernateUtil.closeSession(session);
}
}
分享到:
相关推荐
在探讨Hibernate中联合主键的使用时,我们首先需要理解什么是联合主键以及它在Hibernate框架中的实现方式。联合主键(Composite Primary Key),是指在数据库表中使用两个或多个字段共同作为主键来唯一标识每一行...
如果你使用的是XML映射文件,你需要在`.hbm.xml`文件中指定联合主键。如果使用注解,上述实体类已经包含了必要的信息。 4. **持久化操作:** 在MyEclipse中,你可以使用Hibernate工具或手动编写代码来执行CRUD...
本项目整合了这三个框架,并使用XML配置来管理各个组件,实现了基本的CRUD(创建、读取、更新、删除)功能以及分页查询。 首先,Struts2作为表现层框架,负责处理HTTP请求,控制应用程序的流程。通过定义Action类和...
本文将详细介绍如何利用XML配置实现增删改查功能,并进一步探讨其在复杂查询、数据补录、工作流程设计等方面的应用。 #### 二、XML配置的基本概念 XML是一种用于标记数据的语言,具有良好的结构性和可扩展性。通过...
本篇文章将深入探讨如何通过XML配置实现声明式事务管理。 首先,理解Spring中的事务管理概念是至关重要的。事务是一组操作,这些操作要么全部成功,要么全部失败,确保数据的一致性。在Java环境中,JDBC API提供了...
这种映射有两种主要的实现方式:XML配置和注解配置。 **XML方式** 1. **hibernate.cfg.xml**:这是Hibernate的全局配置文件,用于配置数据源、方言、缓存等信息。 2. **实体类映射文件**:如`User.hbm.xml`,它将...
有了以上配置,你就可以在程序中通过 Hibernate API 来操作这个联合主键的实体类了,例如增删改查等操作。 接下来,我们讨论 `inverse` 属性的影响。`inverse` 属性用于控制在一个关联关系中,哪一方负责维护关联...
以上这些知识点,详细说明了如何使用XML实现变电站中IED设备的自动识别与远程配置,涉及到自动识别机制、远程配置方法、通信协议、数据安全等多个层面,对于理解变电站自动化中的关键技术及其实现方法具有重要的参考...
通过这种方式,我们可以方便地从XML文件中获取并使用系统配置信息,实现系统的动态配置管理。这不仅提高了代码的可维护性,也使得配置管理变得更加灵活和规范。在大型项目中,这样的配置管理方式尤为关键,因为它有...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、可扩展性和易于解析的特点广泛应用于软件开发中,包括作为配置文件来实现多国语言切换的功能。在本文中,我们将深入探讨如何...
传统的SpringMVC配置往往依赖于XML文件,如web.xml和spring-servlet.xml等,但随着Spring框架的发展,出现了基于代码的配置方式,实现了零XML配置,提高了开发效率。本文将详细介绍如何在不使用web.xml的情况下,...
在Spring框架中,任务调度是实现应用程序后台处理和定时任务的关键功能。本篇文章将深入探讨两种不同的任务调度方式:基于`<task>`标签的配置和通过XML配置实现的任务。这两种方法都是Spring为开发者提供的强大工具...
有源代码和VC6下可执行版本,其中...功能:基于XML的C++的应用程序配置器,其实不单可以用于应用程序配置,其它大部分基于XML的应用都可以用,只是在应用程序配置方面提供了便捷性(类似于注册表的操作),而且接口简洁
开发者可以从中学习到如何创建和使用XML配置来实现MyBatis的数据访问,包括定义SQL语句、处理结果映射、事务管理和缓存等关键功能。 总的来说,这个压缩包资源对于那些想要深入理解XML配置,特别是与MyBatis相关的...
SSH(Struts、Spring、Hibernate)是Java Web开发中常用的三大框架,它们分别负责视图层、业务逻辑层和数据访问...实际开发中,开发者可以根据项目的具体需求选择合适的配置方式,以实现高效、灵活的Java Web应用开发。
在`configurationDemo`文件中,可能包含了一个简单的Java应用,该应用展示了如何使用Apache Commons Configuration库进行配置文件的【增删改查】操作以及动态加载。通过运行这个案例,我们可以更直观地理解这些功能...
这些文件可能包括XML配置文件、解析器代码以及如何在应用程序中读取和使用XML配置的示例。通过学习和理解这些内容,开发者可以更好地掌握如何利用XML进行界面配置,提高开发效率,并且能够创造出更易于维护和扩展的...
配置文件,XML文件读写.rar XML的简单易于在多数应用程序中读/写数据,XML是数据交换的公共语言,很多不同的应用软件都支持XML文件。 配置文件,是一种计算机文件,可以对程序配置初始参数;设置程序初始数据。
XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来自动化创建Word文档。 首先,我们需要了解XML的结构。XML(Extensible Markup Language)是一种标记语言...
在Java Web开发中,`struts.xml`, `applicationContext.xml` 和 `web.xml` 是三个至关重要的配置文件,它们各自负责不同的职责,并协同工作来构建一个完整的应用框架。以下是关于这三个配置文件的详细说明。 首先,...