`
悲剧了
  • 浏览: 143825 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JPA--三种关系的处理

阅读更多
一对多关系:男人经常幻想自己有这个,一个男对应上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;
	}
	
}
1
0
分享到:
评论

相关推荐

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    其中,Hibernate作为一款功能强大的ORM框架,极大地简化了Java对象与数据库表之间的映射关系处理。而JPA(Java Persistence API)是Java EE规范的一部分,为ORM提供了标准的接口。`hibernate-jpa-2.1-api-1.0.0....

    hibernate-jpa-2.1-api-1.0.0.final-sources.jar.zip

    JPA(Java Persistence API)是Java平台上的一个标准,用于处理Java对象与关系数据库之间的映射。它定义了一套规范,使得开发人员可以使用面向对象的方式进行持久化操作,而无需关心底层的SQL语法。JPA 2.1版本引入...

    hibernate-jpa-2.0-api-1.0.1.Final-sources

    Hibernate JPA 2.0 API是Java持久化领域的重要组成部分,它为开发人员提供了一种规范化的接口,用于与关系数据库进行交互。这个源码包"hibernate-jpa-2.0-api-1.0.1.Final-sources"包含了完整的源代码,可以帮助我们...

    openjpa-manual

    Java Persistence API (JPA) 是一种用于管理Java应用中的对象关系映射(ORM)的标准规范。它提供了一种统一的方式来处理不同的数据库,并允许开发人员以面向对象的方式进行数据访问,而无需直接编写SQL语句或处理结果...

    hibernate-jpa-2.1-api-1.0.0.Final.jar

    而Hibernate对Java Persistence API (JPA) 的支持,使得开发者能够以更加面向对象的方式处理数据。本文将深入探讨`hibernate-jpa-2.1-api-1.0.0.Final.jar`这个库,了解其源码中的关键概念和API,并结合具体应用,...

    hibernate-jpa-2.1-api 1.0.0.Final API

    Hibernate是Java领域中最受欢迎的对象关系映射(ORM)框架之一,而JPA则是Java平台上的标准 ORM 规范,允许开发者以面向对象的方式处理数据库操作。"API"代表应用程序编程接口,通常是一系列预定义的函数、类和接口...

    JPA-1 概述与HelloWorld

    JPA的主要目标是简化数据库操作,提供一种统一的API来处理对象关系映射(ORM),使得开发人员可以使用面向对象的方式来处理数据库事务,而无需直接编写SQL语句。 JPA规范由Java Community Process(JCP)制定,并在...

    springboot-jpa-activiti-bootstrap-master

    本项目"springboot-jpa-activiti-bootstrap-master"正是一个将这三个技术进行深度整合的实例,旨在帮助开发者理解并掌握它们之间的协同工作方式。 首先,SpringBoot是Spring框架的一种轻量级实现,它简化了设置和...

    JPA-Hibernate包

    **JPA(Java Persistence API)与Hibernate:关系数据库持久化框架** JPA是Java平台上的一个标准,由JSR 317定义,用于管理Java应用程序中的对象持久性。它是Oracle公司提出的,目的是为了简化Java应用程序对关系...

    spring-data-jpa-example

    - JPA 是 Java 平台上的一个标准,用于管理关系数据库中的数据,它通过对象关系映射(ORM)技术将数据库操作转化为对象操作。 - Spring Data JPA 提供了一种声明式的方式,通过接口定义方法即可自动实现对数据库的...

    spring-boot-jpa-demo

    Spring Boot和JPA的组合通常用于简化后端服务的构建,其中Spring Boot提供微服务框架,而JPA是Java标准的ORM(对象关系映射)解决方案,用于处理数据库操作。 【标签】"springboot", "spring boot", "spring", "jpa...

    springData-jpa-demo

    Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA) 的交互,使得在Spring应用程序中处理数据库操作变得更加便捷。本项目“springData-jpa-demo”旨在提供一个示例,帮助开发者理解如何在实践...

    jpa--9.单向多对一

    在Java Persistence API (JPA) 中,"单向多对一"关系是一种常见的对象关系映射(ORM)设计模式,用于表示实体之间的关联。在这个模式中,一个实体("多"端)可以引用另一个实体("一"端),但被引用的实体并不持有对...

    JPA-4 映射关联关系

    JPA 提供了多种方式来处理不同类型的关联关系,包括单向多对一、单向一对多、双向一对一、双向多对一和双向多对多。下面我们将详细探讨这些关联关系的实现方法。 1. **单向多对一关联关系(SingleManyToOne)** 在...

    springboot2-jpa-demo-ccccc

    2. **Java Persistence API (JPA)**:JPA是Java EE平台的一部分,用于处理对象关系映射(ORM)。它允许开发者使用面向对象的方式来操作数据库,而无需编写大量的SQL代码。Spring Data JPA是Spring Framework的一个...

    spring-data-jpa-examples-master.rar_spring data jpa

    Spring Data JPA是Spring Framework的一部分,旨在通过声明式方式处理数据访问,减少了编写样板代码的需求。 【描述】虽然描述信息较简短,但我们可以推断这是关于Spring Data JPA的一系列示例项目。"aa"和重复的"a...

    pax-jpa-sample1-0.1.1.zip

    1. **Java Persistence API (JPA)**: JPA是Java平台上的一个标准,它提供了一种在关系数据库中管理和持久化对象的方法。JPA允许开发者使用面向对象的方式来处理数据,而不是直接编写SQL语句,这极大地简化了数据库...

    jpa-demo.zip

    在Java世界中,Spring Boot框架以其便捷的启动和配置特性深受开发者喜爱,而JPA(Java Persistence API)作为ORM(对象关系映射)标准之一,是处理数据库操作的强大工具。本示例"jpa-demo.zip"是围绕Spring Boot集成...

    hibernate-jpa-2.1-api-1.0.0.draft-6-sources

    源码分析的过程中,我们可以看到Hibernate如何将JPA规范转化为具体的实现,例如,`EntityManager`接口及其实现类如何处理CRUD操作,`PersistenceUnitUtil`类如何处理元数据的获取,以及`Query`接口的实现如何解析并...

    springboot-jpa-001

    JPA是Java平台上的ORM(对象关系映射)标准,它允许开发者以面向对象的方式操作数据库,而无需过多关注SQL语句。Spring Boot通过自动配置,使得只需在项目中引入相应的依赖,即可自动配置好JPA的数据源、实体管理...

Global site tag (gtag.js) - Google Analytics