- 浏览: 250535 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (179)
- Spring3.0 (28)
- HIbernate3.5.6 (35)
- Struts2.1.8 (42)
- JSP (1)
- Servlet (0)
- JAVASE (16)
- JavaWeb (1)
- javaEE (0)
- SSH2整合 (0)
- EJB (0)
- Oracle (7)
- Ajax (7)
- Quartz作业调度框架 (6)
- jsValidationFramework (1)
- FCKeditor (1)
- ExtJS (29)
- JSF (0)
- JPA (0)
- JBoss Seam (0)
- JSON (0)
- Webservice (0)
- JQuery (1)
- Javascript (1)
- Css+DIV (0)
- Lunch (0)
- Linux (0)
- PHP (0)
- XML (1)
- Ibatis (0)
- DWR (0)
- DWZ (0)
最新评论
-
Nabulio:
good
Spring配置SessionFactory -
唤流年:
[color=red][/color] ...
Spring配置SessionFactory -
wangcl011:
Oracle通过数据泵网络导入另一个数据库,不生成DMP文件, ...
oracle命令导入dmp文件 -
rochou:
第一个Hibernate实现CRUD -
ningwuyu:
Entity 类是那个jar里面的
PropertyUtils MethodUtils用法
需求: 在T_STUDENTS表中 要将ID和NAME联合作为主键:
1.将id和name属性定义到一个主键类中:StudentPK 并重写hashCode()和equals()方法同时要继承Serializable接口
package com.zchen.hibernate.sxt.domain; import java.io.Serializable; public class StudentPK implements Serializable{ /** * */ private static final long serialVersionUID = -7880746333829652369L; private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } /*@Override public boolean equals(Object o){ if(o instanceof StudentPK){ StudentPK pk = (StudentPK)o; if(this.id == pk.getId() && this.name.equals(pk.getName())){ return true; } } return false; } @Override public int hashCode(){ return this.name.hashCode(); }*/ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; StudentPK other = (StudentPK) obj; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
2.定义实体类: Students 将主键类放到里面:
package com.zchen.hibernate.sxt.domain; public class Students { private StudentPK pk; public StudentPK getPk() { return pk; } public void setPk(StudentPK pk) { this.pk = pk; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } private int age; private String address; }
3.定义Students.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.zchen.hibernate.sxt.domain"> <class name="Students" table="T_STUDENTS"> <composite-id name="pk" class="com.zchen.hibernate.sxt.domain.StudentPK"> <key-property name="id" column="ID"/> <key-property name="name" column="NAME"/> </composite-id> <property name="age" column="AGE"/> <property name="address" column="ADDRESS"/> </class> </hibernate-mapping>
4.定义配置文件:Hibernate.cfg.xml 略
<?xml version="1.0"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///db_czbk_hibernate</property> <property name="connection.username">root</property> <property name="connection.password">1234</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hbm2ddl.auto">create</property> <property name="current_session_context_class">thread</property> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <property name="show_sql">true</property> <mapping resource="com/zchen/hibernate/sxt/domain/Students.hbm.xml" /> </session-factory> </hibernate-configuration>
5.测试用例:
package com.zchen.hibernate.sxt.test; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.zchen.hibernate.sxt.domain.StudentPK; import com.zchen.hibernate.sxt.domain.Students; public class StudentsTest { private static SessionFactory sf = null; @BeforeClass public static void beforeClass(){ try { sf = new AnnotationConfiguration().configure().buildSessionFactory(); } catch (HibernateException e) { e.printStackTrace(); } } @Test public void addStduentTest(){ StudentPK pk = new StudentPK(); pk.setId(1); pk.setName("zchen"); Students s = new Students(); s.setAge(24); s.setAddress("北京"); s.setPk(pk); Session session = sf.getCurrentSession(); session.beginTransaction(); session.save(s); session.getTransaction().commit(); } @AfterClass public static void afterClass(){ if(sf != null){ try { sf.close(); } catch (HibernateException e) { e.printStackTrace(); } } } }
输出语句:
11:32:09,818 INFO SchemaExport:226 - Running hbm2ddl schema export
11:32:09,821 DEBUG SchemaExport:242 - import file not found: /import.sql
11:32:09,821 INFO SchemaExport:251 - exporting generated schema to database
11:32:09,822 DEBUG SchemaExport:377 - drop table if exists T_STUDENTS
11:32:09,879 DEBUG SchemaExport:377 - create table T_STUDENTS (ID integer not null, NAME varchar(255) not null, AGE integer, ADDRESS varchar(255), primary key (ID, NAME))
11:32:09,953 INFO SchemaExport:268 - schema export complete
Hibernate: insert into T_STUDENTS (AGE, ADDRESS, ID, NAME) values (?, ?, ?, ?)
发表评论
-
Hibernate 1+N 问题
2011-06-03 08:17 12261+N问题的描述:举例,多个主题(Topic)属于一个帖子( ... -
多对多双向关联
2011-06-02 21:38 1019老师和学生: Annotation配置: packa ... -
多对多单向关联
2011-06-02 21:28 831老师和学生: Annotation配置: pack ... -
一对多和多对一双向关联
2011-06-02 20:42 1030一个组有多个用户 一个用户只能属于一个组 在用户表里面有组的外 ... -
一对多单向关联
2011-06-02 19:10 843组和用户 一个组有多个用户,一个用户只能属于一个组: 表结 ... -
多对一单向关联
2011-06-02 18:56 834组和人员: 一个组有多个人员,一个人员属于一个组 在用户表里 ... -
关联关系的联合主键映射
2011-06-02 18:24 1048丈夫和妻子 其中妻子表的主键由id和name组成 ,丈夫和妻子 ... -
枚举映射和不映射的属性配置
2011-06-02 17:54 948import java.util.Date; impor ... -
一对一单双向主键关联-xml
2011-06-02 17:45 1219用户表和用户信息表: 规定:用户信息表中的id主键由用户表生 ... -
一对一双向外键关联
2011-06-02 17:15 965妻子和丈夫: 在丈夫表里面有妻子的外键 学生和学生证: ... -
一对一单向外键关联
2011-06-02 17:01 1106一对一单向外键关联 分为Annotation和xml方式: ... -
Configuration取配置文件 以及取得Session的两种方法的区别
2011-06-02 12:55 1086在得到SessionFactory的时候要先取得配置文件:Hi ... -
联合主键--Annotation
2011-06-02 12:23 1322联合主键Annotation配置方法有三种: 1.将组件类注 ... -
Hibernate设置使用C3P0连接池
2010-12-18 16:37 9931.导入jar文件 2.修改hibernate.cfg.xm ... -
Hibernate设置使用Tomcat中的连接池
2010-12-18 16:31 10851.修改Tomcat的context.xml文件 <C ... -
hibernate.cfg.xml
2010-12-18 15:30 867<?xml version='1.0' encoding ... -
Session和SessionFactory的多线程问题
2010-12-06 15:20 1203Session:是非线程安全的,生命周期较短,代表一个和数据库 ... -
Hibernate的拦截器与监听器
2010-12-06 14:57 1069定义监听器并继承SaveOrUpdateEventListen ... -
Hibernate使用命名查询
2010-12-06 14:37 959命名查询:就是在配置文件里面定义好sql语句。 简单示 ... -
Hibernate使用本地SQL查询语句
2010-12-06 14:12 1125使用本地sql查询语句使用的是Query接口: Query ...
相关推荐
在探讨Hibernate中联合主键的使用时,我们首先需要理解什么是联合主键以及它在Hibernate框架中的实现方式。联合主键(Composite Primary Key),是指在数据库表中使用两个或多个字段共同作为主键来唯一标识每一行...
如果你使用的是XML映射文件,你需要在`.hbm.xml`文件中指定联合主键。如果使用注解,上述实体类已经包含了必要的信息。 4. **持久化操作:** 在MyEclipse中,你可以使用Hibernate工具或手动编写代码来执行CRUD...
在 Hibernate 中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这种主键在数据库设计中常见于需要多个字段唯一标识一条记录的情况。在 Hibernate 中设置联合主键通常需要以下几个步骤: 1. **...
本教程聚焦于“联合主键”这一概念,它在处理复合唯一标识符时非常有用。联合主键(Composite Key)是指由两个或多个字段共同组成的主键,这些字段单独可能不是唯一的,但组合起来确保了数据的唯一性。 在Hibernate...
在某些情况下,单一字段无法唯一标识表中的记录,此时需要多个字段联合起来作为主键。例如,考虑一个学生选课表,可能包含"学生ID"和"课程ID",这两者结合才能唯一确定学生选修的特定课程。 三、Hibernate中复合...
- `<table>`:每个元素代表一个数据库表,你可以设置生成的类名、是否生成主键字段等属性。 - `<jdbcConnection>`:定义数据库连接信息,包括driverClass、connectionURL、userId和password。 - `...
在Hibernate中,这种关系通过中间关联表(也称为连接表或联合表)来实现,该表包含两个实体的主键作为其外键。 二、配置Many-to-Many关系 在Hibernate配置文件(如hibernate.cfg.xml)中,你需要为实体类定义映射...
在实际开发中,主键的生成策略多种多样,包括自增(AUTO)、联合主键等。例如,`@Id`注解可以配合`GeneratedValue`注解来定义主键的生成策略。当使用自增主键时,通常在数据库层面设置,MyBatis或MyBatis-Plus会自动...
在XML配置时代,我们需要在Hibernate的映射文件(.hbm.xml)中显式声明复合主键。现在,大多数项目都使用注解配置,但如果你仍然需要处理旧的项目,这里是如何配置的示例: ```xml <hibernate-mapping> ...
在"mybatis联表查询mapper.xml"中,主表和副表的关系是通过主键外键关联的。主表通常有一条记录对应副表的多条记录,这在数据库设计中称为一对多(1:N)关系。为了在查询时一并获取副表的数据,我们可以使用MyBatis...
- 当单个字段不足以唯一标识一条记录时,可以考虑使用联合主键。 - **实现方式**: - 通过在实体类上使用 @IdClass 注解来定义联合主键。 通过上述内容的梳理,我们可以清晰地了解到 JPA 的核心概念、关键技术和...
ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, ...
- **结果映射**: 可以直接将查询结果映射到Java对象,也可以通过`<resultMap>`定义复杂映射规则,如联合主键、一对一、一对多、多对多等。 6. **缓存机制** MyBatis 提供了本地缓存和二级缓存两种机制,可以提高...
为了提高性能,我们可以使用`fetch="join"`(XML映射)或`@Fetch(FetchMode.JOIN)`(注解)进行联合查询,一次性获取所有关联的数据。 理解并熟练掌握Hibernate的单向一对多关联,能够帮助开发者更高效地处理复杂的...
对于多对一关系,如果总是成对出现,可以考虑使用联合主键或单向关联。 - 使用二级缓存:通过配置Hibernate的二级缓存,可以减少对数据库的访问,提高系统性能。 - HQL与SQL:使用HQL(Hibernate Query Language)...
Mycat 支持多种主键生成策略,包括:UNIONID(联合ID)、SEQUENCE(序列号)、TABLE(表序列)、UUID 和 AUTO_INCREMENT(自增)。其中,AUTO_INCREMENT 策略是与 MySQL 自增主键类似的方式,适用于单表插入操作。...
多主键,也称为复合主键或联合主键,指的是在一个数据表中使用两个或更多的字段共同作为唯一标识符,确保每条记录的唯一性。这种设计常见于关系型数据库中,当单一字段不足以唯一标识一条记录时采用。例如,在一个...
1. 使用`@IdClass`或XML中的`composite-id`定义联合主键。 2. 联合主键需要重写equals和hashCode方法,实现Serializable接口。 七、Hibernate核心接口 1. `Configuration`接口: - 提供了管理配置信息的方法,用于...
ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, ...