1.一对一单向外键关联:
package yingjun.model; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Husband { private int id; private String name; private Date birthday; private Wife wife; @Id @GeneratedValue 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; } @Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @OneToOne //设定对应关系 @JoinColumn(name="wifeid") //外键 public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } }
package yingjun.model; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Wife { private int id; private String name; private Date birthday; @Id @GeneratedValue 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; } @Temporal(TemporalType.DATE) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
create table Husband ( id integer not null auto_increment, birthday date, name varchar(255), wifeid integer, primary key (id) ) create table Wife ( id integer not null auto_increment, birthday date, name varchar(255), primary key (id) ) alter table Husband add index FKAEEA401BF57AD616 (wifeid), add constraint FKAEEA401BF57AD616 foreign key (wifeid) references Wife (id)2.一对一双向外键关联:
package yingjun.model; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Husband { private int id; private String name; private Date birthday; private Wife wife; @Id @GeneratedValue 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; } @Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @OneToOne //设定对应关系 @JoinColumn(name="wifeid") //外键 public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } }
package yingjun.model; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Wife { private int id; private String name; private Date birthday; private Husband hudband; @OneToOne(mappedBy="wife")//告诉已经建立关联,不用建立冗余外键 public Husband getHudband() { return hudband; } public void setHudband(Husband hudband) { this.hudband = hudband; } @Id @GeneratedValue 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; } @Temporal(TemporalType.DATE) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }生成的建表语句和一对一单项外键关联相同即在数据库的表现一样,区别在java程序里面的husband和wife可以互相联系
3.联合主键关联:
package yingjun.model; import java.util.Date; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @IdClass(HusbandPK.class) //指定联合主键 public class Husband { private int id; private String name; private Date birthday; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } @Id public String getName() { return name; } public void setName(String name) { this.name = name; } @Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
package yingjun.model; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Wife { private int id; private String name; private Date birthday; private Husband hudband; @OneToOne @JoinColumns({ @JoinColumn(name="husbandid",referencedColumnName="id"), @JoinColumn(name="husbandname",referencedColumnName="name") }) public Husband getHudband() { return hudband; } public void setHudband(Husband hudband) { this.hudband = hudband; } @Id @GeneratedValue 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; } @Temporal(TemporalType.DATE) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
package yingjun.model; public class HusbandPK { 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; } }
create table Husband ( id integer not null, name varchar(255) not null, birthday date, primary key (id, name) ) create table Wife ( id integer not null auto_increment, birthday date, name varchar(255), husbandid integer, husbandname varchar(255), primary key (id) ) alter table Wife add index FK292331E40F5A5E (husbandid, husbandname), add constraint FK292331E40F5A5E foreign key (husbandid, husbandname) references Husband (id, name)3.组件映射
package yingjun.model; import java.util.Date; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Husband { private int id; private String name; private Date birthday; private Wife wife; @Id 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; } @Temporal(TemporalType.DATE) //改变为yyyy-mm-dd(默认为yyyy-mm-dd hh:mm:ss) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Embedded //将wife的内容嵌入进来作为自己的一部分 public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } }
package yingjun.model; import java.util.Date; public class Wife { private String wifename; private Date wifebirthday; public void setWifebirthday(Date wifebirthday) { this.wifebirthday = wifebirthday; } public Date getWifebirthday() { return wifebirthday; } public void setWifename(String wifename) { this.wifename = wifename; } public String getWifename() { return wifename; } }
create table Husband ( id integer not null, birthday date, name varchar(255), wifebirthday datetime, wifename varchar(255), primary key (id) )
相关推荐
1. 数据库设计简化:组件映射可以避免创建过多的一对多或一对一关联表,简化数据库结构。 2. 代码复用:组件类可以在多个实体中重复使用,提高代码的可重用性。 3. 更强的类型安全:相比直接使用基本类型或字符串,...
“对应关系有一对一,多对一,多对多”则提示我们将深入学习这三种常见的数据库关联关系在Hibernate中的实现方式。 **Hibernate ORM详解** Hibernate是Java平台上的一个开源ORM框架,它通过提供数据持久化服务,...
在 Hibernate 中,组件之间的关联是实现对象模型与数据库表之间映射的关键部分,它包括了一对一、一对多、多对一、多对多等多种关联类型。本篇文章将深入探讨 Hibernate 组件之间的关联机制及其应用。 **一对一关联...
标题中的“Spring+Hibernate 自动映射”是指在Java Web开发中,利用Spring框架与Hibernate ORM工具进行数据层的整合,实现对象关系映射(ORM)的自动化处理。这一技术结合了Spring的强大依赖注入(DI)和事务管理...
这种复杂的映射关系展示了Hibernate的强大之处,它可以处理一对多、多对一、多对多等各种复杂关系,并且能够将对象的复杂结构(如组件和嵌套对象)映射到关系数据库中。通过这种方式,开发人员可以专注于业务逻辑,...
这只是一个起点,深入学习Hibernate,还可以掌握更多的高级特性,如懒加载、级联操作、多对一、一对多、多对多关系映射等。在实际项目中,理解并熟练运用Hibernate,可以显著提升开发效率,降低项目维护成本。
3. **一对一关联**:两个实体之间存在唯一对应关系。 4. **多对多关联**:两个实体之间存在多对多的关系,通常需要通过关联表来实现。 #### 结论 Hibernate通过提供强大的对象关系映射功能,极大地简化了Java应用...
标题和描述都在强调"开源对象关系映射框架Hibernate知识培训",这意味着主要内容将围绕Hibernate这一框架,探讨如何进行对象关系映射(ORM)以及相关的学习和应用。 **对象关系映射(ORM)** 对象关系映射(Object...
在多表映射中,Hibernate允许我们定义实体类之间的关系,如一对一、一对多、多对一和多对多关系。 在“一对多”关系中,一个实体可以对应多个其他实体。例如,一个部门可以有多个员工。在Hibernate中,我们通过在...
- **关联映射**:描述了不同POJO类之间的关联关系,例如一对多、多对多等。 #### 四、查询语言 Hibernate提供了丰富的查询语言支持,主要包括HQL(Hibernate Query Language)和Criteria API。 - **HQL**:类似于...
在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的“继承映射”特性,这是一项关键功能,它允许我们将复杂的类继承结构映射到数据库表中。通过继承映射,...
3. **关联(Association)**:组件也可以通过一对一或一对多关联映射到单独的表,这种情况下称为关联组件(Associated Component)。 **组件映射的优势:** 1. **代码结构清晰**:组件映射有助于保持代码的模块化,...
### 深入理解Hibernate...总之,Hibernate映射文件是实现对象关系映射的核心组件之一,通过对映射文件的合理配置,可以高效地完成Java对象与数据库表之间的映射,从而简化数据库操作并提高代码的可维护性和可扩展性。
18. 示例:不同的映射:除了父子关系映射,还可能有其他类型的映射,如多对多关系映射、一对一关系映射等。这里应该会介绍如何处理这些复杂的映射场景。 19. 最佳实践:最后,文档将总结Hibernate开发中的一些最佳...
Hibernate 是一种OR/M(object relation mapping)对象关系映射工具,是一个可以自动的根据xml 完成 对象关系映射,并持久化到数据库的开源组件,是对JDBC 的封装,主要负责java 对象的持久化.。 对象序列化适应临时...
此外,Hibernate还支持组件映射,通过`component`元素,可以将对象的内部结构映射到单独的数据库表或表的一部分。组件可以包含属性、其他组件甚至集合。`component`元素的`name`属性指定了属性名,`class`属性是组件...
5. **Hibernate_Component**:这部分可能包含了Hibernate组件映射的示例。组件是对象的一部分,可以被嵌入到其他对象中,类似于数据库中的复合类型。通过@Component或@Embeddable注解,可以将一个类声明为组件,并在...
Hibernate是Java开发中的一款非常流行的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互,使得开发者可以更加专注于业务逻辑而不是繁琐的数据访问层代码。在这个“简单的Hibernate应用”中,我们将...