- 浏览: 323315 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (254)
- java (178)
- tomcat (6)
- 邮件 (1)
- smtp (1)
- Linux (2)
- 编码 (2)
- 导入工程 (1)
- Specification Level (1)
- hibernate (10)
- 字段类型 (1)
- 字段类型匹配 (1)
- 数据库 (3)
- sql (9)
- struts2 (8)
- 类型转换 (2)
- java,MyEclipse,SVN (1)
- Myecplise (4)
- 输入校验 (1)
- JFrame (2)
- Oracle (8)
- google (1)
- Swing (3)
- Fusioncharts (1)
- 找工作 (0)
- js (4)
- jsp (11)
- displaytag (1)
- spring (8)
- 工作 (1)
- String (1)
- 算法 (2)
- IO (1)
- xml (3)
- 设计模式 (1)
- UML (1)
- 文档 (1)
- ajax (1)
- 日常 (7)
- sql server (1)
- mysql (3)
- git (1)
- Maven (1)
- mongodb (1)
- postman (1)
最新评论
Hibernate Annotation 联合主键有三种写法 :
第一种:
Jlee01.java代码:
Java代码
JleeKey01.java代码:
Java代码
第二种写法:
Jlee02.java代码:
Java代码
JleeKey02.java代码:
Java代码
第三种写法:
Jlee03.java代码:
Java代码
JleeKey03.java代码:
Java代码
联合主键必须重写 equals 和 hashCode 方法。
hibernate.cfg.xml配置文件:
Xml代码
JleeTest.java代码:
Java代码
第一种:
Jlee01.java代码:
Java代码
package com.jlee03.compositeId; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; /** * @author JLee * @since 2011-2-10 */ @Entity @Table(name="JLEE01") public class Jlee01 implements Serializable{ private static final long serialVersionUID = 3524215936351012384L; private String address ; private int age ; private String email ; private String phone ; JleeKey01 jleeKey = new JleeKey01(); /** * @return the jleeKey */ @Id public JleeKey01 getJleeKey() { return jleeKey; } /** * @param jleeKey the jleeKey to set */ public void setJleeKey(JleeKey01 jleeKey) { this.jleeKey = jleeKey; } /** * @return the phone */ @Column(name="phone" , length=20) public String getPhone() { return phone; } /** * @param phone the phone to set */ public void setPhone(String phone) { this.phone = phone; } /** * @return the address */ @Column(name="address" , length=50) public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; } /** * @return the age */ @Column(name="age") public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * @return the email */ @Column(name="email" , length=23) public String getEmail() { return email; } /** * @param email the email to set */ public void setEmail(String email) { this.email = email; } }
JleeKey01.java代码:
Java代码
package com.jlee03.compositeId; import java.io.Serializable; import javax.persistence.Embeddable; /** * @author JLee * @since 2011-2-10 */ @Embeddable public class JleeKey01 implements Serializable{ private static final long serialVersionUID = -3304319243957837925L; private long id ; private String name ; /** * @return the id */ @Column(name="id",length=64) public long getId() { return id; } /** * @param id the id to set */ public void setId(long id) { this.id = id; } /** * @return the name */ @Column(name="name",length=64) public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if(o instanceof JleeKey01){ JleeKey01 key = (JleeKey01)o ; if(this.id == key.getId() && this.name.equals(key.getName())){ return true ; } } return false ; } @Override public int hashCode() { return this.name.hashCode(); } }
第二种写法:
Jlee02.java代码:
Java代码
package com.jlee03.compositeId; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Table; /** * @author JLee * @since 2011-2-10 */ @Entity @Table(name="JLEE02") public class Jlee02 { private String address ; private int age ; private String email ; private String phone ; private JleeKey02 jleeKey ; /** * @return the jleeKey */ @EmbeddedId public JleeKey02 getJleeKey() { return jleeKey; } /** * @param jleeKey the jleeKey to set */ public void setJleeKey(JleeKey02 jleeKey) { this.jleeKey = jleeKey; } /** * @return the phone */ @Column(name="phone" , length=20) public String getPhone() { return phone; } /** * @param phone the phone to set */ public void setPhone(String phone) { this.phone = phone; } /** * @return the address */ @Column(name="address" , length=50) public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; } /** * @return the age */ @Column(name="age") public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * @return the email */ @Column(name="email" , length=23) public String getEmail() { return email; } /** * @param email the email to set */ public void setEmail(String email) { this.email = email; } }
JleeKey02.java代码:
Java代码
package com.jlee03.compositeId; import java.io.Serializable; /** * @author JLee */ public class JleeKey02 implements Serializable{ private static final long serialVersionUID = -3236523319933461469L; private long id ; private String name ; /** * @return the id */ public long getId() { return id; } /** * @param id the id to set */ public void setId(long id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if(o instanceof JleeKey02){ JleeKey02 key = (JleeKey02)o ; if(this.id == key.getId() && this.name.equals(key.getName())){ return true ; } } return false ; } @Override public int hashCode() { return this.name.hashCode(); } }
第三种写法:
Jlee03.java代码:
Java代码
package com.jlee03.compositeId; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Table; @Entity @Table(name="JLEE03") @IdClass(JleeKey03.class) public class Jlee03 { private long id ; private String name ; /** * @return the id */ @Id public long getId() { return id; } /** * @param id the id to set */ public void setId(long id) { this.id = id; } /** * @return the name */ @Id public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } private String address ; private int age ; private String email ; private String phone ; /** * @return the phone */ @Column(name="phone" , length=20) public String getPhone() { return phone; } /** * @param phone the phone to set */ public void setPhone(String phone) { this.phone = phone; } /** * @return the address */ @Column(name="address" , length=50) public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; } /** * @return the age */ @Column(name="age") public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * @return the email */ @Column(name="email" , length=23) public String getEmail() { return email; } /** * @param email the email to set */ public void setEmail(String email) { this.email = email; } }
JleeKey03.java代码:
Java代码
package com.jlee03.compositeId; import java.io.Serializable; /** * @author JLee */ public class JleeKey03 implements Serializable{ private static final long serialVersionUID = 6060166117433738173L; private long id ; private String name ; /** * @return the id */ public long getId() { return id; } /** * @param id the id to set */ public void setId(long id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if(o instanceof JleeKey03){ JleeKey03 key = (JleeKey03)o ; if(this.id == key.getId() && this.name.equals(key.getName())){ return true ; } } return false ; } @Override public int hashCode() { return this.name.hashCode(); } }
联合主键必须重写 equals 和 hashCode 方法。
hibernate.cfg.xml配置文件:
Xml代码
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/hibernate</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">100</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup --> <!--<property name="hbm2ddl.auto">create</property>--> <mapping class="com.jlee03.compositeId.Jlee01"/> <mapping class="com.jlee03.compositeId.Jlee02"/> <mapping class="com.jlee03.compositeId.Jlee03"/> </session-factory> </hibernate-configuration>
JleeTest.java代码:
Java代码
package com.jlee03.compositeId; import junit.framework.TestCase; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class JleeTest extends TestCase { public void testJlee(){ SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory() ; Session session = sf.getCurrentSession() ; session.beginTransaction() ; Jlee01 jlee01 = new Jlee01() ; JleeKey01 key01 = new JleeKey01() ; key01.setId(0) ; key01.setName("jlee") ; jlee01.setJleeKey(key01) ; jlee01.setAddress("北京") ; jlee01.setAge(23) ; jlee01.setPhone("21321312321") ; Jlee02 jlee02 = new Jlee02() ; JleeKey02 key02 = new JleeKey02() ; key02.setId(0) ; key02.setName("jlee") ; jlee02.setJleeKey(key02) ; jlee02.setAddress("上海") ; jlee02.setAge(32) ; jlee02.setEmail("444823046@qq.com") ; Jlee03 jlee03 = new Jlee03() ; jlee03.setId(1) ; jlee03.setName("jlee") ; jlee03.setAddress("这里") ; jlee03.setAge(32) ; jlee03.setEmail("444823046@qq.com") ; session.save(jlee01) ; session.save(jlee02) ; session.save(jlee03) ; session.getTransaction().commit() ; } public void testExport(){ new SchemaExport(new AnnotationConfiguration().configure()).create(false, true) ; } }
发表评论
-
领域精通涉及技术点(不分先后)
2017-12-20 19:35 618Java8 netty jvm kafaka消息队列 上传下载 ... -
计算机各种单位讲解及换算
2017-12-13 13:54 1635我还听过有UK的 一、最小单位:位(bit,缩写为b) 在原 ... -
JAVA字符串格式化-String.format()和MessageFormat的使用
2017-12-05 10:39 1438String.format()常规类型的格式化 Stri ... -
eclipse启动项目常见问题
2017-11-16 17:46 1180今儿遇到了个问题,ecli ... -
字符编码笔记:ASCII,Unicode和UTF-8
2017-10-23 16:37 456讲的太牛逼了: http://ww ... -
emoji简单讲解
2017-10-23 15:17 972emoji处理方式大起底 http://blog.csdn.n ... -
BigDecimal讲解
2017-10-12 15:58 442BigDecimal 由任意精度的整数非标度值 和 32 位的 ... -
eclips 控制台console上不打印信息
2017-09-06 21:53 5791、进windows菜单 -> show view -& ... -
详解RequestMappingHandlerMapping和RequestMappingHandlerAdapter
2017-08-29 17:08 2966http://donald-draper.iteye.com/ ... -
用@ExceptionHandler 来进行切面异常处理
2017-08-29 11:47 2307有时候我们想处理某个类里Controller中抛出的异常怎么搞 ... -
Spring 注解@Component、@Repository、@Service、@Controller区别
2017-08-28 15:27 1009spring 2.5 中除了提供 @Com ... -
线程的一点小总结
2017-08-23 20:36 705java中main方法启动的是一个进程还是一个线程? 答:是一 ... -
线程池
2017-08-23 17:35 519诸如Web 服务器、数据库 ... -
Class源码大概讲解
2017-08-23 16:47 507http://blog.csdn.net/a327369238 ... -
Spring 事务相关
2017-08-14 12:10 471Transactionz注解的readOnly ... -
把时间当做朋友-前言
2017-08-13 20:47 403要管理的不是时间,而是自己。人们生活在同一个世界,却又各自 ... -
单例里面的方法讲解
2017-08-11 14:55 487spring里的controller是单例的。系统针对每个co ... -
eclipse拷贝出来的项目名称还是原来的
2017-07-26 16:46 1076需要修改的有如下几个地方: 1、pom.xml里面打包的名字一 ... -
自定义hibernate方言,新增自定义函数
2017-06-27 10:47 875按位与运算(&)在许多数据库中都是支持的,遗憾的是,H ... -
http请求参数:header body paramter三种参数区别、联系
2017-06-19 10:46 488812345
相关推荐
### JPA注解实现联合主键 在关系型数据库中,单个字段作为主键的情况较为常见,但在某些场景下,我们需要使用多个字段共同作为主键来唯一标识表中的每一条记录,这就是所谓的“联合主键”。而在Java持久化框架...
**正文** 在Java持久化框架Hibernate中,联合主键...联合主键提供了一种灵活的方式来处理那些单一主键无法满足需求的复杂业务场景。在实际项目中,正确理解和使用联合主键对于优化数据模型和保证数据完整性至关重要。
现在,大多数项目都使用注解配置,但如果你仍然需要处理旧的项目,这里是如何配置的示例: ```xml <hibernate-mapping> <!-- 其他属性 --> </hibernate-mapping> ``` 四、保存和查询带有复合主键的...
本主题将深入探讨Hibernate注解的相关知识点。 1. **注解概述**: 注解(Annotations)是Java 5引入的一种元数据,它提供了在源代码中嵌入信息的方式,这些信息可以被编译器或者在运行时的Java虚拟机使用。在...
在 Hibernate 中,注解是一种简洁且强大的工具,用于替代传统的 XML 配置文件来描述对象模型和数据库之间的映射关系。这篇文档将深入探讨 Hibernate 注解的使用。 ### 第 1 章 创建一个注解项目 在开始使用 ...
在Java的持久化框架Hibernate中,关系映射是将...在处理复杂的数据结构时,联合主键提供了一种灵活的方式,使得实体间的关联更加自然和直观。在开发过程中,理解并熟练运用联合主键可以提高代码的可读性和维护性。
Hibernate注解是元数据的一种形式,它们允许我们在Java类和属性上直接声明关于如何映射到数据库的信息,避免了XML配置文件的繁琐。通过注解,我们可以指定实体类、属性、关联关系等如何对应到数据库表和字段。 二、...
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 ...
这种设计方式非常适合于需要联合多个字段才能唯一确定一个实体的场景。 #### 三、数据库设计 在创建具有复合主键的表时,需要在SQL语句中明确指定哪些字段组合构成了主键。文档中的SQL语句展示了如何创建一个包含...
五、联合主键(Composite Key) 在某些情况下,实体的主键可能由两个或更多个字段组成。这时,我们需要使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键类和其属性。`@EmbeddedId`用于指定实体的主键类,而`@...
本篇文章将深入探讨Hibernate中常见的几种关联关系及其基本配置。 一、一对一(OneToOne)关联 在一对一关联中,一个实体对象只对应数据库中的一个记录。配置方式通常通过`@OneToOne`注解实现,可以设置`mappedBy`...
总结来说,Hibernate复合主键映射是处理多字段主键的关键技术,它通过`@Embeddable`和`@EmbeddedId`注解以及相应的XML配置,使开发者能够方便地管理和操作具有复合主键的实体。在开发过程中,正确理解和使用这项功能...
3. 通过XML覆写元数据:虽然注解是主要的配置方式,但Hibernate也允许通过XML文件来覆盖或补充注解配置,提供了更大的灵活性。 4. Hibernate验证器:Hibernate提供了内置的验证机制,允许开发者通过注解在领域模型...
2. 联合主键:使用@Embeddable和@EmbeddedId注解处理复合主键。 3. 关联映射:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)关系。 4. 集合映射:List、Set、Map等集合...
在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本教程聚焦于Hibernate中的单向一对多关联映射,这是一个常见的实体关系...
对于多对一关系,如果总是成对出现,可以考虑使用联合主键或单向关联。 - 使用二级缓存:通过配置Hibernate的二级缓存,可以减少对数据库的访问,提高系统性能。 - HQL与SQL:使用HQL(Hibernate Query Language)...
Hibernate是一个用于简化Java数据库编程的开源框架,它提供了一种在Java应用程序中持久化对象的方式,避免了直接编写SQL语句,提高了开发效率。 **1. Hibernate基本概念** - **对象关系映射(ORM)**: ORM是将...
3. **对象关系映射**:Hibernate的核心功能在于对象关系映射,它通过注解或XML配置将Java类与数据库表关联,实现对象的持久化。 4. **Session接口**:在Hibernate中,Session是与数据库交互的主要接口,负责保存、...