本文目录一览:
- 1、Jpa中的persist方法和merge方法有哪些区别,帮我举一个例子解释下?
- 2、Spring Data Jpa如何新增和更新?
- 3、java的Jpa是干什么的
- 4、jpa一对多的映射(单向),怎么更新
- 5、JPA的Hibernate散装/批量更新在Spring MVC问题,怎么解决
Jpa中的persist方法和merge方法有哪些区别,帮我举一个例子解释下?
1、含义不同
persist是保存,跟save方法一样,更接近持久化的含义;而merge是合并的意思,就是当保存的实体,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作。
2、用法不同
persist会把传进去的实体放到持久化上下文中,此时如果持久化上下文中有了这个实体,就会抛出javax.persistence.EntityExistsException,没有的话事务提交的时候把那个对象加进数据库中。
而merge会在持久化上下文中生成传进去的实体的受管版本,如果已经有了受管版本,那也不会抛出异常,然后把那个受管的实体返回出来,事务提交的时候如果数据库中不存在那个对象(那一行),就把把那个受管的加进去,存在的话就替换掉原来的数据。
扩展资料:
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。
JPA定义了独特的JPQL,JPQL是EJB
QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP
BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。
参考资料来源:百度百科—JPA
Spring Data Jpa如何新增和更新?
根据ID做新增或者update,主键上打@Id。
一 Spring Data Jpa的更新删除:
JPA可以看作标准化的Hibernate。虽然规定了基本的缓存接口,但是具体实现还是要看具体产品。
可以通过Hibernate进行了解。更新删除的时候JPA都需要先维护缓存才可以删除。如果你要直接删除,必须自己写EQL语句。
二 spring data jpa 怎么使用序列:
1 JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能。
2 Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业。
3 Key-Value - 集成了 Redis 和 Riak ,提供多个常用场景下的简单封装。
4 Document - 集成文档数据库:CouchDB 和 MongoDB 并提供基本的配置映射和资料库支持。
5 Graph - 集成 Neo4j 提供强大的基于 POJO 的编程模型。
6 Graph Roo AddOn - Roo support for Neo4j。
JDBC Extensions - 支持 Oracle RAD、高级队列和高级数据类型
java的Jpa是干什么的
一种规范,全称是:Java Persistence API (java 持久化应用接口),是由sun公司带头制定的。由于目前有很多java持久层的框架,比如Hibernate、TopLink、OpeanJPA等等,选择多了,问题也就来了,导致java程序员不得不学习多种持久层框架。JPA的出现,使程序员从持久层框架的学习中解脱出来,对于实现了JPA规范的持久层框架,他们只要按照JPA的规范开发持久层代码,而不用关心究竟是哪种框架实现的;此外,JPA还对实现其规范的持久层框架做了封装,使得这些框架在使用时更加方便。目前,上面提到的3种持久层框架,都已经实现了JPA的规范。
jpa一对多的映射(单向),怎么更新
有两种方式实现一对多的单向关联。一种是在只使用@OneToMany来标识,这种方式是通过一张第三方表来保存关系。还有一种是使用@OneToMany和@JoinColumn来标注,这种方式是在多的一方(Book)的表中增加一个外键列来保存关系。
第一种方式,通过一张第三方表来实现一对多的单向关联:
Author.java如下,需要注意private SetBook books = new HashSetBook()的注解。只是使用了@OneToMany。
1 package com.cndatacom.jpa.entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.CascadeType; 7 import javax.persistence.Column; 8 import javax.persistence.Entity; 9 import javax.persistence.FetchType;10 import javax.persistence.GeneratedValue;11 import javax.persistence.Id;12 import javax.persistence.OneToMany;13 import javax.persistence.Table;14 15 16 /**17 * 作者18 * @author Luxh19 */20 21 @Entity22 @Table(name="author")23 public class Author {24 25 @Id26 @GeneratedValue27 private Long id;28 29 /**作者的名字*/30 @Column(length=32)31 private String name;32 33 /**作者写的书*/34 @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载35 private SetBook books = new HashSetBook();36 37 38 39 public Long getId() {40 return id;41 }42 43 44 public void setId(Long id) {45 this.id = id;46 }47 48 49 public String getName() {50 return name;51 }52 53 54 public void setName(String name) {55 this.name = name;56 }57 58 59 public SetBook getBooks() {60 return books;61 }62 63 64 public void setBooks(SetBook books) {65 this.books = books;66 }67 68 69 70 71 }
Book.java如下,因为是单向的关联,所以这个实体不需要加任何的关联标识。
1 package com.cndatacom.jpa.entity; 2 3 import javax.persistence.Column; 4 import javax.persistence.Entity; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Id; 7 import javax.persistence.Table; 8 9 /**10 * 书11 * @author Luxh12 */13 14 @Entity15 @Table(name="book")16 public class Book {17 18 @Id19 @GeneratedValue20 private Long id;21 22 /**书名*/23 @Column(length=32)24 private String name;25 26 public Long getId() {27 return id;28 }29 30 public void setId(Long id) {31 this.id = id;32 }33 34 public String getName() {35 return name;36 }37 38 public void setName(String name) {39 this.name = name;40 }41 42 43 }
只在Author实体中对private SetBook books = new HashSetBook()加上标注@OneToMany实现单向关联。这样就通过一个关联表来实现这种关联。生成数据库表如下,会以Author的表名和下划线和Book的表名生成一张表author_book来保存Author和Book的一对多单向映射。
在author_book表中,存的是Auhtor的id和Book的id:
第二种方式,通过在多方(Book)的表中增加一个外键列实现一对多的单向关联。
Author.java如下,需要注意private SetBook books = new HashSetBook()的注解。同时使用了@OneToMany和@JoinColumn。
1 package com.cndatacom.jpa.entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.CascadeType; 7 import javax.persistence.Column; 8 import javax.persistence.Entity; 9 import javax.persistence.FetchType;10 import javax.persistence.GeneratedValue;11 import javax.persistence.Id;12 import javax.persistence.JoinColumn;13 import javax.persistence.OneToMany;14 import javax.persistence.Table;15 16 17 /**18 * 作者19 * @author Luxh20 */21 22 @Entity23 @Table(name="author")24 public class Author {25 26 @Id27 @GeneratedValue28 private Long id;29 30 /**作者的名字*/31 @Column(length=32)32 private String name;33 34 /**作者写的书*/35 @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载36 @JoinColumn(name="author_id")//在book表增加一个外键列来实现一对多的单向关联37 private SetBook books = new HashSetBook();38 39 40 41 public Long getId() {42 return id;43 }44 45 46 public void setId(Long id) {47 this.id = id;48 }49 50 51 public String getName() {52 return name;53 }54 55 56 public void setName(String name) {57 this.name = name;58 }59 60 61 public SetBook getBooks() {62 return books;63 }64 65 66 public void setBooks(SetBook books) {67 this.books = books;68 }69 70 71 72 73 }
Book.java不变。
在数据库中只生成了两张表:author和book。
再看book表的结构,会多了一列author_id。
JPA的Hibernate散装/批量更新在Spring MVC问题,怎么解决
@onetoone
@onttomany
@manytomany
些注解JPAhibernate支持springmvc没关系
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, website.service08@gmail.com 举报,一经查实,本站将立刻删除。