- 浏览: 277487 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhuzhuhenzhencheng:
密码是什么啊
Ext表格(Grid)上面的悬浮提示 -
鹿惊_:
确实如雪中送炭般温暖!
Ext扩展整理后吐血奉献 -
ortega1_2_3:
该版本貌似有bug,当sockIOPool的自平衡线程self ...
Java MemCached Window简单实现 -
q6952592:
好。解决了我的兼容模式下出现的问题。
Ext表格(Grid)上面的悬浮提示 -
fei33423:
请参考 fei33423的文章 java中直接调用groovy ...
Groovy应用(Java与Groovy间相互调用)
Hibernate Annotation 联合主键有三种写法 :
第一种:
Jlee01.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 ; private JleeKey01 jleeKey ; /** * @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代码:
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 */ 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 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代码:
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代码:
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代码:
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代码:
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 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代码:
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) ; } }
发表评论
-
关于Hibernate动态添加与修改
2011-02-18 21:39 1283定义实体 package com.jlee06.QL;imp ... -
搭建Hibernate Annotation工程
2011-02-17 00:29 1421首先从Hibernate官方网站 ... -
Hibernate对JPA的扩展
2011-02-17 00:21 4698Hibernate 3.1 提供了多种 ... -
数据库分页语句
2011-02-11 14:43 806Oracle 数据库分页 三层嵌套: select ... -
Hibernate 使用 Annotation 7(缓存的使用)
2011-02-11 09:03 1257Category.java代码: package com.j ... -
Hibernate 使用 Annotation 6(各种查询语句)
2011-02-11 08:59 2195Category.java代码: package com.j ... -
Hibernate 使用 Annotation 5(一对多双向关联)
2011-02-11 08:54 1233Group.java代码: package com.jlee ... -
Hibernate 使用 Annotation 4(一对多单向关联)
2011-02-11 08:50 1724Group.java代码: package com.jlee ... -
Hibernate 使用 Annotation 4(多对一单向关联)
2011-02-11 00:10 1648Group.java代码: package com.jlee ... -
Hibernate 使用 Annotation 2(主键生成方式)
2011-02-10 23:47 1006hibernate.cfg.xml配置文件: <?xm ... -
Hibernate 注解概述
2011-02-10 23:34 1760Hibernate 注解 定义在 cla ... -
Hibernate 使用 Annotation 1(测试)
2011-02-10 23:33 834Hello World 程序 hibernate.cf ... -
HIbernate中SQLServer2000与2005的配置
2010-11-16 18:50 1005<?xml version='1.0' encoding ... -
Hibernate细粒度划分与复合主键
2010-11-12 22:55 794细粒度划分 Person.hbm.xml配置文件 < ...
相关推荐
综上所述,“最全的Hibernate Annotation API文档”涵盖了从基本的实体映射到复杂的关系映射,再到高级特性的全面知识,是Java开发者学习和使用Hibernate注解的重要参考资料。通过深入理解这些注解,可以更好地掌握...
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
4. **继承策略**:Hibernate支持单表继承(`@Inheritance(strategy = InheritanceType.SINGLE_TABLE)`)、联合继承(`@Inheritance(strategy = InheritanceType.JOINED)`)和分表继承(`@Inheritance(strategy = ...
《Hibernate Annotation 中文帮助文档详解》 Hibernate是一个流行的Java持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库交互。在Hibernate中,Annotation是用于替代传统XML配置的一种...
- 默认情况下,Hibernate 使用`@GeneratedValue`来自动管理主键生成策略,如`GenerationType.IDENTITY`(自增列)、`GenerationType.SEQUENCE`(序列)或`GenerationType.AUTO`(根据数据库决定)。 3. **属性映射...
而Hibernate Annotation是Hibernate框架的一部分,它允许开发者使用注解来配置实体类,替代传统的XML配置文件。本文将深入探讨Hibernate Annotation的应用,帮助开发者更好地理解和使用这一功能。 首先,让我们理解...
自Hibernate 3开始,引入了注解(Annotation)支持,使得开发者无需XML配置就能实现对象与数据库表之间的映射。本文将深入探讨Hibernate注解的使用方法和常见注解,旨在帮助开发者更好地理解和应用Hibernate注解。 ...
第1课 课程内容 6 第2课 Hibernate UML图 6 第3课 风格 7 第4课 资源 7 第5课 环境准备 7 ...三、 联合主键 24 1、xml方式 24 2、annotation方式 27 第14课 Hibernate核心开发接口(重点) 29 ........
3. Inheritance:Hibernate支持多种继承映射策略,如单表继承、联合继承和表-per-hierarchy。 四、关联映射 1. OneToMany/ManyToOne:一对多和多对一关系映射,使用@OneToMany和@ManyToOne注解,@JoinColumn定义...
5. **@JoinTable**:在多对多关系中,用于定义中间表的详细信息,包括联合主键等。 ### 集合映射的加载策略 Hibernate提供了多种加载策略,例如: - **EAGER**:集合会在主对象加载时一起加载,适合小规模数据。 ...
第13课专注于ID主键的生成策略,包括Xml方式和AnnotateOn方式,如AUTO、IDENTITY、SEQUENCE、TABLE等策略,并讨论了联合主键的配置。 第14课是核心内容,介绍了Hibernate的主要开发接口,如`Configuration...
1. Hibernate Annotation 概述 Hibernate Annotations是Hibernate框架中的一种元数据表示方式,它允许开发者在Java实体类上直接添加注解,替代传统的XML配置文件来描述对象关系映射(ORM)。这种方式使得ORM配置更加...
- **联合主键关联(Annotation方式)**:两个对象通过联合主键进行关联。 - **Component(组件)关联映射** - **Component关联映射**:将一个对象的某些属性作为一个单独的对象进行处理。 - **User实体类**:表示...
- **Annotation配置**: 使用@Entity、@Table等注解,以及@EntityListeners等,实现对实体的元数据注解配置。 **3. 数据库映射** - **实体类映射**: 如何定义实体类,包括属性、构造函数、setter/getter方法等。 - *...
5.4.2. 使用 JDK 5.0 的注解(Annotation) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合...
最后,书中可能还会讨论一些高级主题,如Hibernate的联合映射(Association Mapping)、继承映射(Inheritance Mapping)、复合主键(Composite Key)以及自定义类型(Custom Types)。这些特性允许开发者构建更复杂...
Hibernate支持单表继承、连接继承、联合继承等策略,每种策略各有优势和适用场景。 ### 14. 大对象(LOB)映射 对于大文本数据或二进制数据,Hibernate提供了处理大对象(LOB)的机制。LOB可以映射到数据库中的特殊...
5.4.2. 使用 JDK 5.0 的注解(Annotation) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合...
- **联合主键**:当一个实体的主键由多个字段组成时,可以通过XML或Annotation方式指定联合主键。 #### Hibernate核心开发接口 - **Configuration/AnnotationConfiguration**:负责读取配置文件,初始化...
5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) ...