复合(联合)主键映射
通常将复合主键相关的属性,单独放到一个类中
* 此类必须实现序列化接口 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配置实现声明式事务管理。 首先,理解Spring中的事务管理概念是至关重要的。事务是一组操作,这些操作要么全部成功,要么全部失败,确保数据的一致性。在Java环境中,JDBC API提供了...
这种映射有两种主要的实现方式: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为开发者提供的强大工具...
有源代码和VC6下可执行版本,其中...功能:基于XML的C++的应用程序配置器,其实不单可以用于应用程序配置,其它大部分基于XML的应用都可以用,只是在应用程序配置方面提供了便捷性(类似于注册表的操作),而且接口简洁
开发者可以从中学习到如何创建和使用XML配置来实现MyBatis的数据访问,包括定义SQL语句、处理结果映射、事务管理和缓存等关键功能。 总的来说,这个压缩包资源对于那些想要深入理解XML配置,特别是与MyBatis相关的...
在安卓开发中,XML文件常用于数据存储和配置文件,特别是在实现天气应用中,XML文件是数据交换的重要格式。本文将深入探讨如何在Android平台上利用XML文件解析天气数据,同时也会涉及文件存储和SharedPreferences的...
在`configurationDemo`文件中,可能包含了一个简单的Java应用,该应用展示了如何使用Apache Commons Configuration库进行配置文件的【增删改查】操作以及动态加载。通过运行这个案例,我们可以更直观地理解这些功能...
在Java Web开发中,`struts.xml`, `applicationContext.xml` 和 `web.xml` 是三个至关重要的配置文件,它们各自负责不同的职责,并协同工作来构建一个完整的应用框架。以下是关于这三个配置文件的详细说明。 首先,...
5. **解析XML配置**:在应用程序中,你需要使用Java的DOM或SAX解析器来读取和解析XML配置文件。获取到连接信息后,可以使用`java.sql.DriverManager`类的`getConnection()`方法建立数据库连接。 6. **建立数据库...
XML(eXtensible Markup Language)是一种数据存储和交换格式,常被用于应用程序的配置文件,因为它的结构清晰,易于理解和解析。本篇文章将深入探讨如何在C#中读取XML配置文件。 首先,让我们了解XML配置文件的...