一对多关系:男人经常幻想自己有这个,一个男对应上N个女人,可惜在数据库里面这个关系的维护jpa规范却交给了多的一方来维护,男的是被维护端....
代码附加:
mappedBy来声明为被维护端,指定的值是关系维护端由哪个属性去维护这个关系,类似hibernate里面<set name="items" inverse="true"/>
多对一这边也需要声明manytoone
optional=false
不可选代表必须要存在,不能为null
多对以要设置外键名称,@JoinColumn
hibernate <manytonoe column="">
这里面叫order和关键字冲突.通过table来修改
事物问题
你对这个数据进行处理,当处理完却被别人修改了.如果你再查询,会从缓存把你那个依旧拿出来,如果你要调用最新只能refresh(person)
如果后面是many默认就延迟加载,其他是立即加载.
附上此代码:
package com.itcast.domail;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_order")
public class Order {
private String orderid;
private Float amount;
private Set<OrderItem> items=new HashSet<OrderItem>();
@OneToMany(cascade={CascadeType.REMOVE,CascadeType.MERGE,CascadeType.PERSIST },
fetch=FetchType.LAZY,mappedBy="order")
public Set<OrderItem> getItems() {
return items;
}
public void setItems(Set<OrderItem> items) {
this.items = items;
}
@Id
@Column(length=12)
public String getOrderid() {
return orderid;
}
public void setOrderid(String orderid) {
this.orderid = orderid;
}
@Column(nullable=false)
public Float getAmount() {
return amount;
}
public void setAmount(Float amount) {
this.amount = amount;
}
//下面这个方法说明了两者在数据库里的关系
public void addOrderItem(OrderItem orderItem){
orderItem.setOrder(this);
this.items.add(orderItem);
}
}
一对一,和谐的夫妻制度,有人说着是性能力差的人想出来的,不知道说这话的人性能力咋样.....
一对一怎么决定维护端,jpa没规定,自己决定
附上代码
package com.itcast.domail;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class IDCard {
private Integer id;
private String cardId;
private Student student;
//关系的被维护端,由业务需要决定级联
@OneToOne(mappedBy="idCard_id",cascade={CascadeType.PERSIST,CascadeType.MERGE,
},optional=false)
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}@Column(length=18,nullable=false)
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
}
package com.itcast.domail;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
@Entity
public class Student {
private Integer id;
private String name;
private IDCard idCard_id;
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne(cascade={CascadeType.REMOVE,CascadeType.PERSIST,CascadeType.MERGE})
//关系维护端定义外键
@JoinColumn(name="card_id",nullable=false)
public IDCard getIdCard_id() {
return idCard_id;
}
public void setIdCard_id(IDCard idCard_id) {
this.idCard_id = idCard_id;
}
public void addCard(IDCard card){
card.setStudent(this);
this.setIdCard_id(card);
}
}
开放的社会,现在玩的都是你出轨,我也出轨,男女关系很复杂......
代码附加:
双向多对多关系
数据库里面没有这个,通过中间表来搞这个.
删除时:先解除关系再删除
package com.itcast.domail;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Girl {
private String name;
private Integer id;
private Set<Boy> boyFriends=new HashSet<Boy>();
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.EAGER
,mappedBy="girlFriends")
public Set<Boy> getBoyFriends() {
return boyFriends;
}
public void setBoyFriends(Set<Boy> boyFriends) {
this.boyFriends = boyFriends;
}
@Column(nullable=false,length=10)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Girl other = (Girl) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
package com.itcast.domail;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
@Entity
public class Boy {
private String name;
private Integer id;
private Set<Girl> girlFriends=new HashSet<Girl>();
@ManyToMany(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST})
@JoinTable(name="boy_girl",joinColumns=@JoinColumn(name="boy_id"),
inverseJoinColumns=@JoinColumn(name="girl_id"))
public Set<Girl> getGirlFriends() {
return girlFriends;
}
public void setGirlFriends(Set<Girl> girlFriends) {
this.girlFriends = girlFriends;
}
@Column(nullable=false,length=10)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void addGirl(Girl girl){
this.girlFriends.add(girl);
}
//需要重写Gril的hashcode与equls方法
public void removeGirl(Girl girl){
if(this.girlFriends.contains(girl)){
this.girlFriends.remove(girl);
}
}
}
另外附上jpa对联合主键的处理
jpa规定
联合主键:
无参构造
必须要实现序列化接口
必须要重写hashcode equls方法
package com.itcast.domail;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class AirLinePK implements Serializable{
private String startCity;
private String endCity;
@Column(length=3)
public String getStartCity() {
return startCity;
}
public void setStartCity(String startCity) {
this.startCity = startCity;
} @Column(length=3)
public String getEndCity() {
return endCity;
}
public void setEndCity(String endCity) {
this.endCity = endCity;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((endCity == null) ? 0 : endCity.hashCode());
result = prime * result
+ ((startCity == null) ? 0 : startCity.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final AirLinePK other = (AirLinePK) obj;
if (endCity == null) {
if (other.endCity != null)
return false;
} else if (!endCity.equals(other.endCity))
return false;
if (startCity == null) {
if (other.startCity != null)
return false;
} else if (!startCity.equals(other.startCity))
return false;
return true;
}
}
分享到:
相关推荐
其中,Hibernate作为一款功能强大的ORM框架,极大地简化了Java对象与数据库表之间的映射关系处理。而JPA(Java Persistence API)是Java EE规范的一部分,为ORM提供了标准的接口。`hibernate-jpa-2.1-api-1.0.0....
JPA(Java Persistence API)是Java平台上的一个标准,用于处理Java对象与关系数据库之间的映射。它定义了一套规范,使得开发人员可以使用面向对象的方式进行持久化操作,而无需关心底层的SQL语法。JPA 2.1版本引入...
Hibernate JPA 2.0 API是Java持久化领域的重要组成部分,它为开发人员提供了一种规范化的接口,用于与关系数据库进行交互。这个源码包"hibernate-jpa-2.0-api-1.0.1.Final-sources"包含了完整的源代码,可以帮助我们...
Java Persistence API (JPA) 是一种用于管理Java应用中的对象关系映射(ORM)的标准规范。它提供了一种统一的方式来处理不同的数据库,并允许开发人员以面向对象的方式进行数据访问,而无需直接编写SQL语句或处理结果...
而Hibernate对Java Persistence API (JPA) 的支持,使得开发者能够以更加面向对象的方式处理数据。本文将深入探讨`hibernate-jpa-2.1-api-1.0.0.Final.jar`这个库,了解其源码中的关键概念和API,并结合具体应用,...
Hibernate是Java领域中最受欢迎的对象关系映射(ORM)框架之一,而JPA则是Java平台上的标准 ORM 规范,允许开发者以面向对象的方式处理数据库操作。"API"代表应用程序编程接口,通常是一系列预定义的函数、类和接口...
JPA的主要目标是简化数据库操作,提供一种统一的API来处理对象关系映射(ORM),使得开发人员可以使用面向对象的方式来处理数据库事务,而无需直接编写SQL语句。 JPA规范由Java Community Process(JCP)制定,并在...
本项目"springboot-jpa-activiti-bootstrap-master"正是一个将这三个技术进行深度整合的实例,旨在帮助开发者理解并掌握它们之间的协同工作方式。 首先,SpringBoot是Spring框架的一种轻量级实现,它简化了设置和...
**JPA(Java Persistence API)与Hibernate:关系数据库持久化框架** JPA是Java平台上的一个标准,由JSR 317定义,用于管理Java应用程序中的对象持久性。它是Oracle公司提出的,目的是为了简化Java应用程序对关系...
- JPA 是 Java 平台上的一个标准,用于管理关系数据库中的数据,它通过对象关系映射(ORM)技术将数据库操作转化为对象操作。 - Spring Data JPA 提供了一种声明式的方式,通过接口定义方法即可自动实现对数据库的...
Spring Boot和JPA的组合通常用于简化后端服务的构建,其中Spring Boot提供微服务框架,而JPA是Java标准的ORM(对象关系映射)解决方案,用于处理数据库操作。 【标签】"springboot", "spring boot", "spring", "jpa...
Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA) 的交互,使得在Spring应用程序中处理数据库操作变得更加便捷。本项目“springData-jpa-demo”旨在提供一个示例,帮助开发者理解如何在实践...
在Java Persistence API (JPA) 中,"单向多对一"关系是一种常见的对象关系映射(ORM)设计模式,用于表示实体之间的关联。在这个模式中,一个实体("多"端)可以引用另一个实体("一"端),但被引用的实体并不持有对...
JPA 提供了多种方式来处理不同类型的关联关系,包括单向多对一、单向一对多、双向一对一、双向多对一和双向多对多。下面我们将详细探讨这些关联关系的实现方法。 1. **单向多对一关联关系(SingleManyToOne)** 在...
2. **Java Persistence API (JPA)**:JPA是Java EE平台的一部分,用于处理对象关系映射(ORM)。它允许开发者使用面向对象的方式来操作数据库,而无需编写大量的SQL代码。Spring Data JPA是Spring Framework的一个...
Spring Data JPA是Spring Framework的一部分,旨在通过声明式方式处理数据访问,减少了编写样板代码的需求。 【描述】虽然描述信息较简短,但我们可以推断这是关于Spring Data JPA的一系列示例项目。"aa"和重复的"a...
1. **Java Persistence API (JPA)**: JPA是Java平台上的一个标准,它提供了一种在关系数据库中管理和持久化对象的方法。JPA允许开发者使用面向对象的方式来处理数据,而不是直接编写SQL语句,这极大地简化了数据库...
在Java世界中,Spring Boot框架以其便捷的启动和配置特性深受开发者喜爱,而JPA(Java Persistence API)作为ORM(对象关系映射)标准之一,是处理数据库操作的强大工具。本示例"jpa-demo.zip"是围绕Spring Boot集成...
源码分析的过程中,我们可以看到Hibernate如何将JPA规范转化为具体的实现,例如,`EntityManager`接口及其实现类如何处理CRUD操作,`PersistenceUnitUtil`类如何处理元数据的获取,以及`Query`接口的实现如何解析并...
JPA是Java平台上的ORM(对象关系映射)标准,它允许开发者以面向对象的方式操作数据库,而无需过多关注SQL语句。Spring Boot通过自动配置,使得只需在项目中引入相应的依赖,即可自动配置好JPA的数据源、实体管理...