照样在开始实验前搭建环境:
该示例来自于itcast
这里的一对一 关系维护端JPA没有规范 可以由我们来决定关系的维护端于被维护端
第一步:
导入相关的*.jar 包
在classpath类路径下创建META-INF 文件夹在里面创建persistence.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<!-- 以transaction-type下是 事务提交类型有两种事务:第一、本地事务(在同一个数据库中完成事务) 第二、全局事务(在不同数据库中需要在同一事务中完成不同数据库的操作)-->
<persistence-unit name="person" transaction-type="RESOURCE_LOCAL">
<properties>
<!-- 使用的方言 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver" />
<!-- 数据库用户名 -->
<property name="hibernate.connection.username" value="root" />
<!-- 数据库密码 -->
<property name="hibernate.connection.password" value="liyong" />
<!-- 数据库连接url -->
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8" />
<!-- 表结构发生变化的时候更新表结构 ,表不存在是创建表-->
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
第二步:创建IDCcard.java Person.java
IDCcard.java
@Entity
public class IDCard {
private String number;
private Integer idCard;
private Person person;
public IDCard(){}
public IDCard(String number){
this.number=number;
}
@Column(nullable=false,length=18)
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)
public Integer getIdCard() {
return idCard;
}
public void setIdCard(Integer idCard) {
this.idCard = idCard;
}
@OneToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH,CascadeType.PERSIST},mappedBy="card")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
Person.java
@Entity
public class Person {
private String name;
private Integer id;
private IDCard card;
public Person(){}
public Person(String name){
this.name=name;
}
@Column(length=12,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne(cascade={CascadeType.ALL},optional=false)
@JoinColumn(name="idcard_id")
public IDCard getCard() {
return card;
}
public void setCard(IDCard card) {
this.card = card;
}
}
第三步:编写单元测试
@Test
public void save()
{
EntityManagerFactory factor=Persistence.createEntityManagerFactory("person");
EntityManager entity= factor.createEntityManager();
entity.getTransaction().begin();
Person person=new Person("小张");
IDCard card=new IDCard("111111111111");
person.setCard(card);
entity.persist(person);
entity.getTransaction().commit();
entity.close();
factor.close();
}
第四步:运行创建表见mysql数据库
源码见附件:
分享到:
相关推荐
这篇博客将深入探讨JPA中的一对多双向关联以及级联操作。 首先,让我们理解一对多关联。假设我们有两个实体,一个是`User`(用户)和一个是`Post`(帖子)。一个用户可以发布多个帖子,但一个帖子只能属于一个用户...
本讲解将深入探讨JPA中的一对一双向关联特性,帮助开发者更好地理解和应用这一功能。 一对一双向关联是指在两个实体类之间存在一对一的关系,并且双方都能直接访问对方。这种关联关系在现实世界的例子中很常见,...
本资料主要探讨了JPA中的一对一双向关联,这是一个重要的概念,对于理解和优化数据模型设计至关重要。 一对一双向关联是指在两个实体类中,每个实体都可以直接引用对方,形成双向的关系。例如,一个学生可以对应一...
总结来说,JPA中的多对多双向关联实体定义涉及`@ManyToMany`、`@JoinTable`以及`mappedBy`等注解的使用。正确配置这些注解可以让我们轻松地管理实体之间的复杂关系,并简化数据库操作。在实际项目中,理解并熟练掌握...
在双向关联中,必须有一方(通常是拥有`mappedBy`的一方)作为关系的“拥有者”,它的变更会直接影响到数据库。 4. **注解细节**:`@JoinColumn`用于单向一对一或一对多关系,而在多对多关系中,通常使用`@Join...
本资料包"10_JPA详解_JPA中的一对多双向关联与级联操作.zip"聚焦于JPA中的一个重要概念——一对多双向关联及其级联操作。以下是对这一主题的详细阐述。 **一对多关联** 在关系数据库设计中,一对多关联是最常见的...
7. `@JoinColumn`: 在单向关联中用于指定外键列,但在双向关联中通常不直接使用,而是由`@JoinTable`处理。 在实体类中,双向关联通常会涉及两个属性,分别代表对方实体的集合。例如,在`Student`实体中会有`List...
本教程将深入探讨JPA中的一对多双向关联及级联操作,这对于理解和使用JPA进行复杂数据模型管理至关重要。 首先,我们来理解一下一对多关联。在数据库设计中,一对多关联是指一个实体(表)可以与多个其他实体相关联...
在这个场景中,我们将深入探讨如何在JPA 2中实现一对多双向关联关系。 首先,我们需要定义两个实体,一个是"一"的一端,另一个是"多"的一端。假设我们有`Department`(部门)和`Employee`(员工)两个实体。在`...
2. **关联的维护**:在双向关联中,有主侧和次侧之分。主侧实体负责维护关联,即添加或删除关联时,只操作主侧实体即可。次侧实体的关联会自动更新。 3. ** Cascade操作**:`@ManyToMany`支持级联操作,如`...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第12讲 JPA中的一对一双向关联.avi
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第10讲 JPA中的一对多双向关联与级联操作.avi
在双向关联中,两个实体类都可以访问对方的集合,这意味着每个实体都能知道与之关联的所有其他实体。 ### 2. 实现双向多对多关联 要创建双向多对多关联,我们需要在两个实体类中都定义`@ManyToMany`注解,并使用`@...
总的来说,JPA的`@OneToOne`注解提供了处理一对一关联的强大工具,尤其是在处理双向关联时。正确理解和使用这些关联,能够帮助我们更好地进行对象与数据库之间的映射,提高代码的可读性和维护性。在实际项目中,应...
在一对一关联中,一个实体对应另一个实体的唯一实例。这种关系可以通过在实体类中定义注解来实现。JPA提供了`@OneToOne`注解来声明这种关系。接下来,我们将深入探讨如何配置和使用JPA的一对一关联。 首先,我们...
双向的一对一关联则需要在两个实体上都进行配置,但只有一个方向是“拥有”关系,用`@OneToOne(cascade=CascadeType...)`来指定级联操作。 4. **一对多关联(JPAOneToMany)** 一对多关联意味着一个实体可以与多个...
本文将深入探讨在JPA中如何实现双向多对多的关联关系,并提供相关的示例代码。 首先,我们需要了解多对多关联关系的基本概念。在关系型数据库中,两个实体之间可能存在多对多的关系,意味着每个实例可以从一个实体...
在一对一关联中,一个实体实例对应数据库中的唯一一行。这种关系可以用@OneToOne注解来表示,它可以是单向或双向的。例如,一个用户可能只有一个账户,账户实体和用户实体之间就是一对一的关系。可以通过设置mapped...