首页 > 其他分享 >第二百四十一节 JPA教程 - JPA一对一主键连接列示例、JPA一对一映射级联示例

第二百四十一节 JPA教程 - JPA一对一主键连接列示例、JPA一对一映射级联示例

时间:2024-09-21 21:24:35浏览次数:3  
标签:name 示例 JPA javax 一对一 id import public persistence

JPA教程 - JPA一对一主键连接列示例

例子

下面的代码来自Person.java。

package cn.w3cschool.common;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;

@Entity
public class Person {
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private long id;
   
  private String name;
  @OneToOne
  @PrimaryKeyJoinColumn
  private Department department;
  
  public Person() {}

  public Person(String name) {
    this.name = name;
  }


  public Department getDepartment() {
    return department;
  }

  public void setDepartment(Department department) {
    this.department = department;
  }

  public Long getId() {
    return id;
  }
  public void setId(Long id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return "Person [id=" + id + ", name=" + name + "]";
  }

}

下面的代码来自Department.java。

package cn.w3cschool.common;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Department {
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private long id;
  
  private String name;

  @OneToOne(mappedBy="department") 
  private Person person;
  
  public Person getPerson() {
    return person;
  }

  public void setPerson(Person person) {
    this.person = person;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

下面的代码来自PersonDaoImpl.java。

package cn.w3cschool.common;


import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class PersonDaoImpl {
  public void test(){
    Person p1 = new Person("Tom");
    
    p1.setName("Tom");
    
    Department d = new Department();
    d.setName("Design");
    p1.setDepartment(d);
    d.setPerson(p1);
    
    em.persist(p1);
    em.persist(d);
  }
  @PersistenceContext
  private EntityManager em;
}

以下是数据库转储。

Table Name: DEPARTMENT
 Row:
    Column Name: ID,
    Column Type: BIGINT:
    Column Value: 1

    Column Name: NAME,
    Column Type: VARCHAR:
    Column Value: Design





Table Name: PERSON
 Row:
    Column Name: ID,
    Column Type: BIGINT:
    Column Value: 1

    Column Name: NAME,
    Column Type: VARCHAR:
    Column Value: Tom

JPA教程 - JPA一对一映射级联示例

以下代码显示如何为一对一映射设置级联操作。

  @OneToOne(cascade=CascadeType.ALL,mappedBy="department")
  private Person person;

例子

下面的代码来自Department.java。

package cn.w3cschool.common;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Department {
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private long id;
  
  private String name;
  
  @OneToOne(cascade=CascadeType.ALL,mappedBy="department")
  private Person person;
  
  public Person getPerson() {
    return person;
  }

  public void setPerson(Person person) {
    this.person = person;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return "Department [id=" + id + ", name=" + name + ", person=" + person
        + "]";
  }
}

下面的代码来自PersonDaoImpl.java。

package cn.w3cschool.common;


import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class PersonDaoImpl {
  public void test(){
    Person p1 = new Person("Tom");
    
    p1.setName("Tom");
    
    Department d = new Department();
    d.setName("Design");
    p1.setDepartment(d);
    d.setPerson(p1);
    
    em.persist(p1);
    em.persist(d);
    
    Query query = em.createQuery("SELECT e FROM Person e");
    List<Person> list = (List<Person>) query.getResultList();
    System.out.println(list.get(0).getDepartment());
    
    em.remove(list.get(0));
    
  }
  @PersistenceContext
  private EntityManager em;
}

下面的代码来自Person.java。

package cn.w3cschool.common;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
@Entity
public class Person {
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private long id;
   
  private String name;
  
  @OneToOne(cascade=CascadeType.ALL)
  @JoinColumn(name="DEPT_ID")   
  private Department department;
  
  public Person() {}

  public Person(String name) {
    this.name = name;
  }


  public Department getDepartment() {
    return department;
  }

  public void setDepartment(Department department) {
    this.department = department;
  }

  public Long getId() {
    return id;
  }
  public void setId(Long id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return "Person [id=" + id + ", name=" + name + "]";
  }

}

标签:name,示例,JPA,javax,一对一,id,import,public,persistence
From: https://blog.csdn.net/2301_78772942/article/details/142390451

相关文章

  • Typescript 中的泛型是什么 - 为什么使用它们,它们如何与代码示例一起使用
    介绍什么是泛型?typescript中的泛型提供了一种创建可以使用多种类型而不是单一类型的组件的方法。它们允许您定义针对不同数据类型灵活且可重用的函数、类或接口,同时保持强大的类型安全性。本质上,泛型使您能够编写能够适应不同类型的代码,而不会失去typescript类型系统的优......
  • SOLID 原则使用一些有趣的类比与车辆示例
    solid是计算机编程中五个良好原则(规则)的缩写。solid允许程序员编写更易于理解和稍后更改的代码。solid通常与使用面向对象设计的系统一起使用。让我们使用车辆示例来解释solid原理。想象一下,我们正在设计一个系统来管理不同类型的车辆,例如汽车和电动汽车,以提供运输服务。......
  • React 与 React (RC):主要区别和迁移技巧与示例
    react是用于构建用户界面的流行javascript库,随着每个新版本的发布而不断发展。在这篇博文中,我们将探讨react18和即将推出的react19(目前处于候选发布阶段)之间的主要区别,提供新功能示例,并为使用react和vite的开发人员提供迁移技巧。目录简介react19的当前状态与......
  • <<编码>> 第 16 章 存储器组织(1)--比特锁存器 示例电路
    1比特锁存器info::操作说明鼠标单击逻辑输入切换0|1状态就是前面的电平触发的D型锁存器.写入(Write)就是时钟信号primary::在线交互操作链接https://cc.xiaogd.net/?startCircuitLink=https://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlc......
  • 英飞凌 PSoC6 评估板 CAPSENSE 触摸滑条应用示例
    PSoC™62withCAPSENSE™evaluationkit开发板(以下简称PSoC6RTT开发板)是英飞凌(Infineon)联合RT-Thread发布一款面向物联网开发者的32位双核MCU开发套件,其默认内置RT-Thread物联网操作系统。本文主要介绍CAPSENSE™技术原理,并通过RT-ThreadStudio快速开......
  • 元学习的简单示例
    代码功能模型结构:SimpleModel是一个简单的两层全连接神经网络。元学习过程:在maml_train函数中,每个任务由支持集和查询集组成。模型先在支持集上进行训练,然后在查询集上进行评估,更新元模型参数。任务生成:通过create_task_data函数生成随机任务数据,用于模拟不同的学习任务......
  • Javascript 中的展开和休息运算符及其示例
    剩余和扩展运算符是javascript中强大的功能,允许您更有效地处理数组、对象和函数参数。它们都使用相同的语法(...),但用途不同。休息操作员(...)剩余运算符用于将所有剩余元素收集到数组中。它通常用在函数参数中来处理可变数量的参数。休息运算符示例:functionsum(......
  • CompletableFuture使用示例
    CompletableFuture是Java8中引入的一个功能强大的类,它实现了Future和CompletionStage两个接口,主要用于异步编程。通过它,开发者可以以一种非阻塞的方式编写异步代码,从而提高程序的响应速度和资源利用率。异步执行:CompletableFuture支持在后台线程中异步执行计算或操作,避免阻塞主线......
  • JavaScript For 循环示例
    标准for循环for(leti=0;i<h2>for...of循环(遍历数组)</h2><preclass="brush:php;toolbar:false">constfruits=['apple','banana','orange'];for(constfruitoffruits){console.log(fruit);登录后复制......
  • Javascript Slice 方法及其示例
    什么是javascript数组切片?array.prototype.slice是一个jsarray方法,用于从现有数组中提取连续的子数组或“切片”。javascript切片可以接受两个参数:切片的开始和结束指示符——两者都是可选的。也可以在没有任何参数的情况下调用它。因此,它具有以下调用签名://slice();slice......