复合(联合)主键映射
通常将复合主键相关的属性,单独放到一个类中
* 此类必须实现序列化接口 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配置来管理各个组件,实现了基本的CRUD(创建、读取、更新、删除)功能以及分页查询。 首先,Struts2作为表现层框架,负责处理HTTP请求,控制应用程序的流程。通过定义Action类和...
本篇文章将深入探讨如何通过XML配置实现声明式事务管理。 首先,理解Spring中的事务管理概念是至关重要的。事务是一组操作,这些操作要么全部成功,要么全部失败,确保数据的一致性。在Java环境中,JDBC API提供了...
本文将深入探讨配置文件中的XML及其公共类的使用方法,通过具体代码示例来解析其功能与应用场景。 #### 一、XML配置文件概述 XML配置文件是一种基于文本的数据存储方式,通过标签和属性来组织和描述数据。这种格式...
这种映射有两种主要的实现方式:XML配置和注解配置。 **XML方式** 1. **hibernate.cfg.xml**:这是Hibernate的全局配置文件,用于配置数据源、方言、缓存等信息。 2. **实体类映射文件**:如`User.hbm.xml`,它将...
有了以上配置,你就可以在程序中通过 Hibernate API 来操作这个联合主键的实体类了,例如增删改查等操作。 接下来,我们讨论 `inverse` 属性的影响。`inverse` 属性用于控制在一个关联关系中,哪一方负责维护关联...
以上这些知识点,详细说明了如何使用XML实现变电站中IED设备的自动识别与远程配置,涉及到自动识别机制、远程配置方法、通信协议、数据安全等多个层面,对于理解变电站自动化中的关键技术及其实现方法具有重要的参考...
通过这种方式,我们可以方便地从XML文件中获取并使用系统配置信息,实现系统的动态配置管理。这不仅提高了代码的可维护性,也使得配置管理变得更加灵活和规范。在大型项目中,这样的配置管理方式尤为关键,因为它有...
传统的SpringMVC配置往往依赖于XML文件,如web.xml和spring-servlet.xml等,但随着Spring框架的发展,出现了基于代码的配置方式,实现了零XML配置,提高了开发效率。本文将详细介绍如何在不使用web.xml的情况下,...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、可扩展性和易于解析的特点广泛应用于软件开发中,包括作为配置文件来实现多国语言切换的功能。在本文中,我们将深入探讨如何...
在Spring框架中,任务调度是实现应用程序后台处理和定时任务的关键功能。本篇文章将深入探讨两种不同的任务调度方式:基于`<task>`标签的配置和通过XML配置实现的任务。这两种方法都是Spring为开发者提供的强大工具...
开发者可以从中学习到如何创建和使用XML配置来实现MyBatis的数据访问,包括定义SQL语句、处理结果映射、事务管理和缓存等关键功能。 总的来说,这个压缩包资源对于那些想要深入理解XML配置,特别是与MyBatis相关的...
SSH(Struts、Spring、Hibernate)是Java Web开发中常用的三大框架,它们分别负责视图层、业务逻辑层和数据访问...实际开发中,开发者可以根据项目的具体需求选择合适的配置方式,以实现高效、灵活的Java Web应用开发。
在安卓开发中,XML文件常用于数据存储和配置文件,特别是在实现天气应用中,XML文件是数据交换的重要格式。本文将深入探讨如何在Android平台上利用XML文件解析天气数据,同时也会涉及文件存储和SharedPreferences的...
这些文件可能包括XML配置文件、解析器代码以及如何在应用程序中读取和使用XML配置的示例。通过学习和理解这些内容,开发者可以更好地掌握如何利用XML进行界面配置,提高开发效率,并且能够创造出更易于维护和扩展的...
XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来自动化创建Word文档。 首先,我们需要了解XML的结构。XML(Extensible Markup Language)是一种标记语言...
在本篇文章中,我们将深入探讨如何使用全XML配置的方式实现一个纯流程跳转的Spring Web Flow应用,而不涉及具体的业务功能实现。 首先,我们需要理解Spring Web Flow的核心概念,包括`Flow`、`State`和`Transition`...
5. **解析XML配置**:在应用程序中,你需要使用Java的DOM或SAX解析器来读取和解析XML配置文件。获取到连接信息后,可以使用`java.sql.DriverManager`类的`getConnection()`方法建立数据库连接。 6. **建立数据库...
XML(eXtensible Markup Language)是一种数据存储和交换格式,常被用于应用程序的配置文件,因为它的结构清晰,易于理解和解析。本篇文章将深入探讨如何在C#中读取XML配置文件。 首先,让我们了解XML配置文件的...