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 ...
随机推荐
- 定制Dynamics CRM标准导出功能:不能导出指定列的值
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复239或者20161203可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- 个人博客如何开启 https
以前写过利用 wordpress 搭建的一个博客『个人博客搭建( wordpress )』,绑定了域名,但是没开启 https,在浏览博客的时候浏览器会提示不安全.下面来谈下个人博客如何免费申请证书, ...
- iOS 多线程知识梳理
#iOS多线程知识梳理 ##线程进程基础概念 ###进程 进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 ###线程 1个进程要想执行任务,必须 ...
- PHP代码篇(五)--如何将图片文件上传到另外一台服务上
说,我有一个需求,就是一个临时功能.由于工作开发问题,我们有一个B项目,需要有一个商品添加的功能,涉及到添加商品内容,比如商品名字,商品描述,商品库存,商品图片等.后台商品添加的接口已经写完了,但是问 ...
- python从入门到放弃之协程
协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...
- CodeForces - 1256D (贪心+思维)
题意 给定一个长度为n的二进制串(即由n个'0'和'1'构成的字符串),你最多可以进行k次交换相邻两个字符的操作,求字典序最小的串. 思路 大致就是找0的位置,然后贪心的放到最前面,这样字典序会最小: ...
- 一套从alpine基本镜像到node8.16.2的全套dockerfile
这个花了点时间,可以正式跑起来了. 加了常用的工具及中文时区,非root帐号. 除了pm2,其它的module放到应用程序本身的node_modules目录下来实现的. 一,3rd_part/node ...
- luoguP4113 [HEOI2012]采花
经典颜色问题推荐博文 https://www.cnblogs.com/tyner/p/11519506.html https://www.cnblogs.com/tyner/p/11616770.ht ...
- 【BZOJ5457】城市(线段树合并)
点此看题面 大致题意: 一棵树上每个点有颜色\(a_i\)和权值\(b_i\),求以每个点为根的子树内权值和最大的颜色及其权值和. 线段树合并 这是一道线段树合并板子题. (关于线段树合并,可参考我的 ...
- 第04组 Alpha冲刺(1/4)
队名:斗地组 组长博客:地址 作业博客:Alpha冲刺(1/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.安排好各个组员的任务 2.收集各个组员的进度 3.写页面 4.写博客 展示Gi ...