JPA笔记1 ManyToOne
persistence.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <persistence version="2.0"
- 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_2_0.xsd">
- <persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <!-- <class>helloworld.Customer</class> -->
- <properties>
- <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
- <property name="javax.persistence.jdbc.url"
- value="jdbc:mysql://x.x.x.x:3306/jpa-test?useUnicode=true&characterEncoding=utf8" />
- <property name="javax.persistence.jdbc.user" value="admin" />
- <property name="javax.persistence.jdbc.password" value="123456" />
- <property name="hibernate.format_sql" value="true" />
- <property name="hibernate.show_sql" value="true" />
- <property name="hibernate.hbm2ddl.auto" value="update" />
- </properties>
- </persistence-unit>
- </persistence>
ManyToOne测试代码
- package helloworld;
- import javax.persistence.EntityManager;
- import javax.persistence.EntityManagerFactory;
- import javax.persistence.EntityTransaction;
- import javax.persistence.Persistence;
- public class Main {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String persistenceUnitName = "jpa-1";
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
- EntityManager entityManager = entityManagerFactory.createEntityManager();
- EntityTransaction transaction = entityManager.getTransaction();
- transaction.begin();
- // insert(entityManager);
- // find(entityManager);
- // getReference(entityManager);
- // remove(entityManager);
- // merge(entityManager);
- // flush(entityManager);
- // manyToOnePersist(entityManager);
- // manyToOneFind(entityManager);
- // manyToOneRemove(entityManager);
- manyToOneUpdate(entityManager);
- transaction.commit();
- entityManager.close();
- entityManagerFactory.close();
- }
- // 1.插入
- private static void insert(EntityManager entityManager) {
- Customer customer = new Customer();
- customer.setEmail("fs2@ss.com");
- customer.setLastName("123");
- customer.setAge(23);
- customer.setCla(33);
- customer.setFf("aa");
- customer.setId(10);
- entityManager.persist(customer);
- }
- // 2.查询(注意,如果修改了对象属性,会被提交到数据库)
- private static void find(EntityManager entityManager) {
- Customer customer = entityManager.find(Customer.class, 1);
- System.out.println("----------------");
- System.out.println(customer);
- }
- // 3.引用查询,在调用对象的时候才执行sql
- private static void getReference(EntityManager entityManager) {
- Customer customer = entityManager.getReference(Customer.class, 1);
- System.out.println("----------------");
- System.out.println(customer);
- }
- // 4.删除
- private static void remove(EntityManager entityManager) {
- Customer customer = entityManager.find(Customer.class, 2);
- entityManager.remove(customer);
- System.out.println("----------------");
- }
- // 5.合并(根据ID判断,存在ID的记录并且数据有变化的则update,不存在则insert)
- private static void merge(EntityManager entityManager) {
- Customer customer = new Customer();
- customer.setEmail("5@ss.com");
- customer.setLastName("4");
- customer.setAge(2);
- customer.setCla(2);
- customer.setFf("3");
- Customer customer2 = entityManager.merge(customer);// 没有id,插入数据
- System.out.println("----------------" + customer.getId());
- System.out.println("----------------" + customer2.getId());
- System.out.println(customer.equals(customer2));
- Customer customer_1 = new Customer();
- customer_1.setEmail("5@ss.com");
- customer_1.setLastName("4");
- customer_1.setAge(21);
- customer_1.setCla(2);
- customer_1.setFf("3");
- customer_1.setId(5);
- Customer customer_2 = entityManager.merge(customer_1);// 有id的数据,如果数据有变化则修改
- System.out.println("----------------" + customer_1.getId());
- System.out.println("----------------" + customer_2.getId());
- System.out.println(customer_1.equals(customer_2));
- }
- // 6.将缓存数据刷新到数据库,不执行该方法,需要在执行commit的时候才提交到数据库
- private static void flush(EntityManager entityManager) {
- Customer customer = entityManager.find(Customer.class, 1);
- System.out.println("----------------");
- customer.setAge(1234);
- entityManager.flush();
- System.out.println(customer);
- }
- // 7.保存多对一的数据时,建议先保存一的,再保存多的,这样不会多出update语句
- private static void manyToOnePersist(EntityManager entityManager) {
- Order order = new Order();
- order.setOrderName("order1");
- Order order2 = new Order();
- order2.setOrderName("order2");
- Customer customer = new Customer();
- customer.setEmail("5@ss.com");
- customer.setLastName("4");
- customer.setAge(2);
- customer.setCla(2);
- customer.setFf("3");
- order.setCustomer(customer);
- order2.setCustomer(customer);
- entityManager.persist(customer);
- entityManager.persist(order);
- entityManager.persist(order2);
- }
- // 8.查询多对一数据
- private static void manyToOneFind(EntityManager entityManager) {
- Order order = entityManager.find(Order.class, 1);
- System.out.println(order.getOrderName());
- System.out.println(order.getCustomer());
- order.setOrderName("victor");
- }
- // 9.不能直接删除一的一端,因为有外键关联
- private static void manyToOneRemove(EntityManager entityManager) {
- Customer customer = entityManager.find(Customer.class, 12);
- entityManager.remove(customer);
- }
- // 10.修改多对一数据
- private static void manyToOneUpdate(EntityManager entityManager) {
- Order order = entityManager.find(Order.class, 3);
- order.setOrderName("vv");
- order.getCustomer().setAge(100);
- }
- }
Customer类:
- package helloworld;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- @Table(name = "JPA_CUSTOMERS")
- @Entity
- public class Customer {
- @Override
- public String toString() {
- return "Customer [id=" + id + ", lastName=" + lastName + ", email=" + email + ", age=" + age + ", cla=" + cla + ", ff=" + ff + "]";
- }
- private Integer id;
- private String lastName;
- private String email;
- private int age;
- private int cla;
- private String ff;
- @GeneratedValue(strategy = GenerationType.AUTO)
- @Id
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getLastName() {
- return lastName;
- }
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public int getCla() {
- return cla;
- }
- public void setCla(int cla) {
- this.cla = cla;
- }
- public String getFf() {
- return ff;
- }
- public void setFf(String ff) {
- this.ff = ff;
- }
- }
Order类:
- package helloworld;
- import javax.persistence.Column;
- import javax.persistence.ConstraintMode;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.ForeignKey;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.ManyToOne;
- import javax.persistence.Table;
- @Table(name = "JPA_ORDER")
- @Entity
- public class Order {
- private Integer id;
- private String orderName;
- private Customer customer;
- @GeneratedValue(strategy = GenerationType.AUTO)
- @Id
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- @Column(name = "order_name")
- public String getOrderName() {
- return orderName;
- }
- public void setOrderName(String orderName) {
- this.orderName = orderName;
- }
- //映射单向n-1的关联关系
- @JoinColumn(name = "customer_id")//, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
- @ManyToOne(fetch=FetchType.LAZY)
- public Customer getCustomer() {
- return customer;
- }
- public void setCustomer(Customer customer) {
- this.customer = customer;
- }
- @Override
- public String toString() {
- return "Order [id=" + id + ", orderName=" + orderName + ", customer=" + customer + "]";
- }
- }
JPA笔记1 ManyToOne的更多相关文章
- Jpa 笔记
ORM 思想 对象关系映射, 建立实体类和表的关系映射关系, 实体类和表中字段的映射关系,我们操作实体类底层是操作数据表, 进而自动的拼接出SQL语句 Jpa规范 Jpa(Java Persisten ...
- Spring Data JPA笔记
1. Spring Data JPA是什么 Spring Data JPA是Spring Data大家族中的一员,它对对持久层做了简化,用户只需要声明方法的接口,不需要实现该接口,Spring Dat ...
- JPA笔记2 OneToMany
package one_to_many; import java.util.HashSet; import java.util.Set; import javax.persistence.Cascad ...
- JPA笔记4 ManyToMany
package many_to_many; import java.util.HashSet; import java.util.Set; import javax.persistence.Entit ...
- JPA笔记3 OneToOne
package one_to_one; import javax.persistence.Entity; import javax.persistence.FetchType; import java ...
- jpa
学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...
- JPA + SpringData 操作数据库 ---- 深入了解 SpringData
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...
- JPA 系列教程3-单向多对一
JPA中的@ManyToOne 主要属性 - name(必需): 设定"many"方所包含的"one"方所对应的持久化类的属性名 - column(可选): 设 ...
- JPA学习笔记(8)——映射一对多关联关系
一对多关联关系 本文有很多和多对一是一样的,因此不会写得非常具体. 有看不懂的.能够參考JPA学习笔记(7)--映射多对一关联关系 Order实体类 package com.jpa.helloworl ...
随机推荐
- hook declined to update refs/heads/dev
提交一个项目,push的时候,报错: warning: Large files detected. remote: error: File TaodangpuAuction/TaodangpuAuct ...
- 版本管理·玩转git(远程仓库配置和配置公钥免密登录)
git系列的最后一部分内容,我们先来看看如何查看远程仓库. 输入 git remote -v 我们还可以删除远程库,输入 git remote remove origin 删除后再次查询,信息为空. ...
- -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 成 ...
- PyCharm2019.3专业版激活
1. 首先到官网下载Professional(专业版),链接地址: https://www.jetbrains.com/pycharm/download/ 具体安装方法这里就不赘述 2. 下载补丁je ...
- alertmanager
alertmanager主要用于接收prometheus发送的告警信息: wget下载,解压, 配置alertmanager.yml,内容如下: 在prometheus文件下添加rules.yml内容 ...
- Python爬虫:
python中selenium操作下拉滚动条方法汇总 UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元 ...
- 浅谈C++ STL deque 容器
浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...
- ESP8266 LUA脚本语言开发: 外设篇-GPIO输入检测
咱使用 GPIO0 https://nodemcu.readthedocs.io/en/master/modules/gpio/#gpioread 第一种 GPIO设置为输出的状态下读取引脚状态 gp ...
- MySQL实战45讲学习笔记:第二十七讲
一.一主多从的切换正确性 在前面的第24.25和26篇文章中,我和你介绍了 MySQL 主备复制的基础结构,但这些都是一主一备的结构. 大多数的互联网应用场景都是读多写少,因此你负责的业务,在发展过程 ...
- Paper | Predicting the Quality of Images Compressed After Distortion in Two Steps
目录 1. 问题本质剖析 2. 方法细节 图像质量评估大佬AC Bovik的论文,发表在2019 TIP上. 考虑的问题:对于有参考图像质量评估(R-IQA)任务,参考图像有时是有损的.这会导致评估的 ...