persistence.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persistence version="2.0"
  3. xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  5. <persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
  6.  
  7. <provider>org.hibernate.ejb.HibernatePersistence</provider>
  8.  
  9. <!-- <class>helloworld.Customer</class> -->
  10. <properties>
  11.  
  12. <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
  13. <property name="javax.persistence.jdbc.url"
  14. value="jdbc:mysql://x.x.x.x:3306/jpa-test?useUnicode=true&amp;characterEncoding=utf8" />
  15. <property name="javax.persistence.jdbc.user" value="admin" />
  16. <property name="javax.persistence.jdbc.password" value="123456" />
  17.  
  18. <property name="hibernate.format_sql" value="true" />
  19. <property name="hibernate.show_sql" value="true" />
  20. <property name="hibernate.hbm2ddl.auto" value="update" />
  21. </properties>
  22. </persistence-unit>
  23. </persistence>

ManyToOne测试代码

  1. package helloworld;
  2.  
  3. import javax.persistence.EntityManager;
  4. import javax.persistence.EntityManagerFactory;
  5. import javax.persistence.EntityTransaction;
  6. import javax.persistence.Persistence;
  7.  
  8. public class Main {
  9.  
  10. public static void main(String[] args) {
  11. // TODO Auto-generated method stub
  12.  
  13. String persistenceUnitName = "jpa-1";
  14. EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
  15.  
  16. EntityManager entityManager = entityManagerFactory.createEntityManager();
  17.  
  18. EntityTransaction transaction = entityManager.getTransaction();
  19. transaction.begin();
  20.  
  21. // insert(entityManager);
  22. // find(entityManager);
  23. // getReference(entityManager);
  24. // remove(entityManager);
  25. // merge(entityManager);
  26. // flush(entityManager);
  27. // manyToOnePersist(entityManager);
  28. // manyToOneFind(entityManager);
  29. // manyToOneRemove(entityManager);
  30. manyToOneUpdate(entityManager);
  31.  
  32. transaction.commit();
  33. entityManager.close();
  34. entityManagerFactory.close();
  35. }
  36.  
  37. // 1.插入
  38. private static void insert(EntityManager entityManager) {
  39. Customer customer = new Customer();
  40. customer.setEmail("fs2@ss.com");
  41. customer.setLastName("123");
  42. customer.setAge(23);
  43. customer.setCla(33);
  44. customer.setFf("aa");
  45. customer.setId(10);
  46. entityManager.persist(customer);
  47. }
  48.  
  49. // 2.查询(注意,如果修改了对象属性,会被提交到数据库)
  50. private static void find(EntityManager entityManager) {
  51. Customer customer = entityManager.find(Customer.class, 1);
  52. System.out.println("----------------");
  53. System.out.println(customer);
  54. }
  55.  
  56. // 3.引用查询,在调用对象的时候才执行sql
  57. private static void getReference(EntityManager entityManager) {
  58. Customer customer = entityManager.getReference(Customer.class, 1);
  59. System.out.println("----------------");
  60. System.out.println(customer);
  61. }
  62.  
  63. // 4.删除
  64. private static void remove(EntityManager entityManager) {
  65. Customer customer = entityManager.find(Customer.class, 2);
  66. entityManager.remove(customer);
  67. System.out.println("----------------");
  68. }
  69.  
  70. // 5.合并(根据ID判断,存在ID的记录并且数据有变化的则update,不存在则insert)
  71. private static void merge(EntityManager entityManager) {
  72. Customer customer = new Customer();
  73. customer.setEmail("5@ss.com");
  74. customer.setLastName("4");
  75. customer.setAge(2);
  76. customer.setCla(2);
  77. customer.setFf("3");
  78.  
  79. Customer customer2 = entityManager.merge(customer);// 没有id,插入数据
  80.  
  81. System.out.println("----------------" + customer.getId());
  82. System.out.println("----------------" + customer2.getId());
  83. System.out.println(customer.equals(customer2));
  84.  
  85. Customer customer_1 = new Customer();
  86. customer_1.setEmail("5@ss.com");
  87. customer_1.setLastName("4");
  88. customer_1.setAge(21);
  89. customer_1.setCla(2);
  90. customer_1.setFf("3");
  91. customer_1.setId(5);
  92.  
  93. Customer customer_2 = entityManager.merge(customer_1);// 有id的数据,如果数据有变化则修改
  94.  
  95. System.out.println("----------------" + customer_1.getId());
  96. System.out.println("----------------" + customer_2.getId());
  97. System.out.println(customer_1.equals(customer_2));
  98. }
  99.  
  100. // 6.将缓存数据刷新到数据库,不执行该方法,需要在执行commit的时候才提交到数据库
  101. private static void flush(EntityManager entityManager) {
  102. Customer customer = entityManager.find(Customer.class, 1);
  103. System.out.println("----------------");
  104. customer.setAge(1234);
  105. entityManager.flush();
  106. System.out.println(customer);
  107. }
  108.  
  109. // 7.保存多对一的数据时,建议先保存一的,再保存多的,这样不会多出update语句
  110. private static void manyToOnePersist(EntityManager entityManager) {
  111.  
  112. Order order = new Order();
  113. order.setOrderName("order1");
  114.  
  115. Order order2 = new Order();
  116. order2.setOrderName("order2");
  117.  
  118. Customer customer = new Customer();
  119. customer.setEmail("5@ss.com");
  120. customer.setLastName("4");
  121. customer.setAge(2);
  122. customer.setCla(2);
  123. customer.setFf("3");
  124.  
  125. order.setCustomer(customer);
  126. order2.setCustomer(customer);
  127.  
  128. entityManager.persist(customer);
  129. entityManager.persist(order);
  130. entityManager.persist(order2);
  131.  
  132. }
  133.  
  134. // 8.查询多对一数据
  135. private static void manyToOneFind(EntityManager entityManager) {
  136. Order order = entityManager.find(Order.class, 1);
  137. System.out.println(order.getOrderName());
  138. System.out.println(order.getCustomer());
  139. order.setOrderName("victor");
  140. }
  141.  
  142. // 9.不能直接删除一的一端,因为有外键关联
  143. private static void manyToOneRemove(EntityManager entityManager) {
  144. Customer customer = entityManager.find(Customer.class, 12);
  145. entityManager.remove(customer);
  146. }
  147.  
  148. // 10.修改多对一数据
  149. private static void manyToOneUpdate(EntityManager entityManager) {
  150. Order order = entityManager.find(Order.class, 3);
  151. order.setOrderName("vv");
  152.  
  153. order.getCustomer().setAge(100);
  154. }
  155. }

Customer类:

  1. package helloworld;
  2.  
  3. import javax.persistence.Entity;
  4. import javax.persistence.GeneratedValue;
  5. import javax.persistence.GenerationType;
  6. import javax.persistence.Id;
  7. import javax.persistence.Table;
  8.  
  9. @Table(name = "JPA_CUSTOMERS")
  10. @Entity
  11. public class Customer {
  12.  
  13. @Override
  14. public String toString() {
  15. return "Customer [id=" + id + ", lastName=" + lastName + ", email=" + email + ", age=" + age + ", cla=" + cla + ", ff=" + ff + "]";
  16. }
  17.  
  18. private Integer id;
  19. private String lastName;
  20. private String email;
  21. private int age;
  22. private int cla;
  23. private String ff;
  24.  
  25. @GeneratedValue(strategy = GenerationType.AUTO)
  26. @Id
  27. public Integer getId() {
  28. return id;
  29. }
  30.  
  31. public void setId(Integer id) {
  32. this.id = id;
  33. }
  34.  
  35. public String getLastName() {
  36. return lastName;
  37. }
  38.  
  39. public void setLastName(String lastName) {
  40. this.lastName = lastName;
  41. }
  42.  
  43. public String getEmail() {
  44. return email;
  45. }
  46.  
  47. public void setEmail(String email) {
  48. this.email = email;
  49. }
  50.  
  51. public int getAge() {
  52. return age;
  53. }
  54.  
  55. public void setAge(int age) {
  56. this.age = age;
  57. }
  58.  
  59. public int getCla() {
  60. return cla;
  61. }
  62.  
  63. public void setCla(int cla) {
  64. this.cla = cla;
  65. }
  66.  
  67. public String getFf() {
  68. return ff;
  69. }
  70.  
  71. public void setFf(String ff) {
  72. this.ff = ff;
  73. }
  74.  
  75. }

Order类:

  1. package helloworld;
  2.  
  3. import javax.persistence.Column;
  4. import javax.persistence.ConstraintMode;
  5. import javax.persistence.Entity;
  6. import javax.persistence.FetchType;
  7. import javax.persistence.ForeignKey;
  8. import javax.persistence.GeneratedValue;
  9. import javax.persistence.GenerationType;
  10. import javax.persistence.Id;
  11. import javax.persistence.JoinColumn;
  12. import javax.persistence.ManyToOne;
  13. import javax.persistence.Table;
  14.  
  15. @Table(name = "JPA_ORDER")
  16. @Entity
  17. public class Order {
  18.  
  19. private Integer id;
  20. private String orderName;
  21.  
  22. private Customer customer;
  23.  
  24. @GeneratedValue(strategy = GenerationType.AUTO)
  25. @Id
  26. public Integer getId() {
  27. return id;
  28. }
  29.  
  30. public void setId(Integer id) {
  31. this.id = id;
  32. }
  33.  
  34. @Column(name = "order_name")
  35. public String getOrderName() {
  36. return orderName;
  37. }
  38.  
  39. public void setOrderName(String orderName) {
  40. this.orderName = orderName;
  41. }
  42.  
  43. //映射单向n-1的关联关系
  44. @JoinColumn(name = "customer_id")//, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
  45. @ManyToOne(fetch=FetchType.LAZY)
  46. public Customer getCustomer() {
  47. return customer;
  48. }
  49.  
  50. public void setCustomer(Customer customer) {
  51. this.customer = customer;
  52. }
  53.  
  54. @Override
  55. public String toString() {
  56. return "Order [id=" + id + ", orderName=" + orderName + ", customer=" + customer + "]";
  57. }
  58.  
  59. }

JPA笔记1 ManyToOne的更多相关文章

  1. Jpa 笔记

    ORM 思想 对象关系映射, 建立实体类和表的关系映射关系, 实体类和表中字段的映射关系,我们操作实体类底层是操作数据表, 进而自动的拼接出SQL语句 Jpa规范 Jpa(Java Persisten ...

  2. Spring Data JPA笔记

    1. Spring Data JPA是什么 Spring Data JPA是Spring Data大家族中的一员,它对对持久层做了简化,用户只需要声明方法的接口,不需要实现该接口,Spring Dat ...

  3. JPA笔记2 OneToMany

    package one_to_many; import java.util.HashSet; import java.util.Set; import javax.persistence.Cascad ...

  4. JPA笔记4 ManyToMany

    package many_to_many; import java.util.HashSet; import java.util.Set; import javax.persistence.Entit ...

  5. JPA笔记3 OneToOne

    package one_to_one; import javax.persistence.Entity; import javax.persistence.FetchType; import java ...

  6. jpa

    学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...

  7. JPA + SpringData 操作数据库 ---- 深入了解 SpringData

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...

  8. JPA 系列教程3-单向多对一

    JPA中的@ManyToOne 主要属性 - name(必需): 设定"many"方所包含的"one"方所对应的持久化类的属性名 - column(可选): 设 ...

  9. JPA学习笔记(8)——映射一对多关联关系

    一对多关联关系 本文有很多和多对一是一样的,因此不会写得非常具体. 有看不懂的.能够參考JPA学习笔记(7)--映射多对一关联关系 Order实体类 package com.jpa.helloworl ...

随机推荐

  1. hook declined to update refs/heads/dev

    提交一个项目,push的时候,报错: warning: Large files detected. remote: error: File TaodangpuAuction/TaodangpuAuct ...

  2. 版本管理·玩转git(远程仓库配置和配置公钥免密登录)

    git系列的最后一部分内容,我们先来看看如何查看远程仓库. 输入 git remote -v 我们还可以删除远程库,输入 git remote remove origin 删除后再次查询,信息为空. ...

  3. -bash: /home/java/jdk1.8.0_221/bin/java: 权限不够

    1)进入存放jdk文件的文件夹路径我这里是 usr/local/jdk/2)输入命令 chmod 777 jdk1.8.0_221/bin/java修改权限3)再次输入 java -version 成 ...

  4. PyCharm2019.3专业版激活

    1. 首先到官网下载Professional(专业版),链接地址: https://www.jetbrains.com/pycharm/download/ 具体安装方法这里就不赘述 2. 下载补丁je ...

  5. alertmanager

    alertmanager主要用于接收prometheus发送的告警信息: wget下载,解压, 配置alertmanager.yml,内容如下: 在prometheus文件下添加rules.yml内容 ...

  6. Python爬虫:

    python中selenium操作下拉滚动条方法汇总   UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元 ...

  7. 浅谈C++ STL deque 容器

    浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...

  8. ESP8266 LUA脚本语言开发: 外设篇-GPIO输入检测

    咱使用 GPIO0 https://nodemcu.readthedocs.io/en/master/modules/gpio/#gpioread 第一种 GPIO设置为输出的状态下读取引脚状态 gp ...

  9. MySQL实战45讲学习笔记:第二十七讲

    一.一主多从的切换正确性 在前面的第24.25和26篇文章中,我和你介绍了 MySQL 主备复制的基础结构,但这些都是一主一备的结构. 大多数的互联网应用场景都是读多写少,因此你负责的业务,在发展过程 ...

  10. Paper | Predicting the Quality of Images Compressed After Distortion in Two Steps

    目录 1. 问题本质剖析 2. 方法细节 图像质量评估大佬AC Bovik的论文,发表在2019 TIP上. 考虑的问题:对于有参考图像质量评估(R-IQA)任务,参考图像有时是有损的.这会导致评估的 ...