- 浏览: 155102 次
- 性别:
- 来自: 湖南
文章分类
最新评论
-
viking_wu:
Android POST方式提交数据 -
hsiunien:
不能正常调用 init android4.3上 是否可以 ...
Android JS双向调用 -
liaokang.java:
Apple.Chen 写道你确定这是插入排序而不是冒泡?插入排 ...
java之插入排序 -
Apple.Chen:
你确定这是插入排序而不是冒泡?
java之插入排序 -
ct19900913:
顶一个!!!
Android ContentProvider共享数据
JPA全称为java persistence API,是原SUN公司提出的java持久化规范,它为开发人员提供一种对象/关系映射工具来管理java应用中的关系数据,它的出现是为了简化现有的持久化开发工作和整合ORM技术,结束了现在Hibernate,TopLink,JDO各自为营的局面,JPA不是一种ORM框架,它只是规范了现有的ORM技术,这点类似于JDBC,此时开发出来的应用不再依赖于某个开发商,在不修改代码的情况下,只要在JPA环境下应该都可以运行,做到了低耦合,可扩展性
JPA规范要求在类路径META-INF目录下放置persistence.xml,文件的名称是固定的,下面我就用联合主键的小例子来演示JPA的使用
1.新建一个java项目,引入所需的jar包,我选的JPA的实现框架是Hibernate,在src目录下新建一个文件夹META-INF,在其文件夹先新建配置文件persistence.xml
我用的是MYSQL数据库,所谓联合主键就是一个实体类中主键由两个或者两个以上字段构成,以下是以飞机票为例
联合主键类
实体类
写个测试类
既然说到了实体就不得不说说四种实体bean的存在方式
分别是新建,托管,游离,删除,新建,删除好理解,新建就是new一个新的对象,删除就是删除记录,托管是指在事务开启的情况下从数据库取出一条记录并将其某一属性值修改然后提交这样数据库中相应的记录就会得到更新,而游离也是在事务开启的情况下得到记录,不同托管的是实体管理器需将其下的所有实体变成游离状态,举个例子如下
着眼未来几年的技术走向,JPA作为ORM领域标准化的整合者的目标不难实现,让我们共同期待
JPA规范要求在类路径META-INF目录下放置persistence.xml,文件的名称是固定的,下面我就用联合主键的小例子来演示JPA的使用
1.新建一个java项目,引入所需的jar包,我选的JPA的实现框架是Hibernate,在src目录下新建一个文件夹META-INF,在其文件夹先新建配置文件persistence.xml
<persistence 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_1_0.xsd" version="1.0"> <persistence-unit name="testJPA" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/数据库名?userUnicode=true&characterEncoding=UTF-8" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="数据库密码" /> </properties> </persistence-unit> </persistence>
我用的是MYSQL数据库,所谓联合主键就是一个实体类中主键由两个或者两个以上字段构成,以下是以飞机票为例
联合主键类
package com.lamp.bean; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Embeddable; @Embeddable public class AirLinePK implements Serializable { private static final long serialVersionUID = -1487096630571343331L; private String startCity; private String endCity; public AirLinePK(){} public AirLinePK(String startCity, String endCity) { this.startCity = startCity; this.endCity = endCity; } @Column(length=3) public String getEndCity() { return endCity; } public void setEndCity(String endCity) { this.endCity = endCity; } @Column(length=3) public String getStartCity() { return startCity; } public void setStartCity(String startCity) { this.startCity = startCity; } @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; } }
实体类
package com.lamp.bean; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class AirLine { private AirLinePK id; private String name; public AirLine(){} public AirLine(String startCity, String endCity, String name){ this.id = new AirLinePK(startCity,endCity); this.name = name; } @EmbeddedId public AirLinePK getId() { return id; } public void setId(AirLinePK id) { this.id = id; } @Column(length=20) public String getName() { return name; } public void setName(String name) { this.name = name; } }
写个测试类
@Test public void save(){ EntityManagerFactory factory = Persistence.createEntityManagerFactory("testJPA"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.persist(new AirLine("PEK","SHA","从北京飞上海")); em.getTransaction().commit(); em.close(); factory.close(); }
既然说到了实体就不得不说说四种实体bean的存在方式
分别是新建,托管,游离,删除,新建,删除好理解,新建就是new一个新的对象,删除就是删除记录,托管是指在事务开启的情况下从数据库取出一条记录并将其某一属性值修改然后提交这样数据库中相应的记录就会得到更新,而游离也是在事务开启的情况下得到记录,不同托管的是实体管理器需将其下的所有实体变成游离状态,举个例子如下
EntityManagerFactory factory = Persistence.createEntityManagerFactory("testJPA"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Person person = em.find(Person.class, 1); em.clear(); //把实体管理器中的实体全部变成游离状态 person.setName("游离状态后设置的名称"); em.merge(person); em.getTransaction().commit(); em.close(); factory.close();
着眼未来几年的技术走向,JPA作为ORM领域标准化的整合者的目标不难实现,让我们共同期待
发表评论
-
java自定义Annotation
2013-08-23 11:41 959自定义Annotation概念篇 来看一个最简单的annota ... -
JBPM安装和配置
2012-09-10 21:30 4504在介绍JBPM的安装之前可能有人会问,JBPM不是说它 ... -
java NIO
2011-09-26 10:25 1338原有的I/O操作都是以字节为单位进行读写的,虽然应用时 ... -
java多线程下载网络资源
2011-09-09 10:43 1437在java中,我们可以通过URL和HttpURLConnect ... -
java方法参数是引用调用还是值调用
2011-08-19 14:17 1009方法调用(call by) 是一个标准的计算机科学术语 ... -
HashSet介绍
2011-08-18 21:35 936(1) 为啥要用HahSet? 假如我们现在想要在一大 ... -
java日期转化"BUG"
2011-08-05 16:43 1010最近看了一个有意思的帖子,拿来分享一下 SimpleDa ... -
java之网络编程
2011-08-03 11:12 1037提到java的网络编程,大家肯定会想到TCP,UDP协议,下面 ... -
java虚拟机基础知识
2011-06-22 10:35 11501.java虚拟机与程序的生命周期 在如下几种情况下,java ... -
HashMap底层的实现
2011-06-20 13:20 7433首先我们来看看HashMap的底层源码 /** ... -
java动态代理分析
2011-06-07 12:48 9091.所谓动态代理类是这样一种class,首先它是在运行期生成的 ... -
TreeSet分析
2011-06-04 21:08 10271. |——SortedSet接口——TreeSe ... -
equals和hashCode方法分析
2011-06-04 17:51 9431.HashSet存放的是无序,不能重复的对象,当添加一个对象 ... -
ArrayList与LinkedList分析
2011-06-04 11:49 995先看看ArrayList源码 public class A ... -
HashMap和Hashtable分析
2011-05-26 22:17 10081.先说继承关系吧 Java代码 public class H ... -
java的克隆
2011-05-08 22:02 1022所谓复制就是将一份东西拷贝一份,在java中有浅复制和深复制的 ... -
java线程通信
2011-05-08 16:39 784一说到线程通信我们就会想到生产者和消费者,哲学家就餐问题,下面 ... -
java多线程及synchronized
2011-05-08 13:31 635通常我们所说的程序它只是一个静态的概念,而进程是其动态性的体现 ... -
java反射机制2
2011-05-06 08:55 903package com.lamp.test; pub ... -
java反射机制
2011-05-05 19:47 1007反射是java一大特征,没有它java体现不出它那些优点,更别 ...
相关推荐
#### 使用JPA注解实现联合主键 在JPA中,我们可以通过`@IdClass`和`@Id`注解来实现联合主键。下面将详细介绍如何通过这些注解来实现联合主键。 ### 创建复合主键类 首先,需要创建一个复合主键类来存储需要组成...
本篇文章将深入探讨JPA中的联合主键概念、实现方式以及其在实际应用中的使用场景。 ### JPA 基本概念 JPA 是一种Java规范,它提供了一种标准的方式来管理和持久化Java对象到关系数据库。通过使用JPA,开发者可以...
在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来实现联合主键。 1. **@IdClass注解**:当你需要创建一个单独的类来表示联合主键时,可以使用@IdClass。例如,假设我们有一个`Student`实体和一个`Course`实体...
在本篇文章中,我们将深入探讨JPA中的联合主键实现,以及如何在实际项目中使用它。 首先,让我们理解联合主键的基本概念。在关系数据库中,主键是用来唯一标识表中每一行记录的字段或字段组合。在JPA中,我们可以...
**JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识实体的关键字段。通常,一个实体可能只有一个主键字段,但有些情况下,为了实现唯一标识,可能需要使用两个或多个字段的组合,这就是...
**JPA联合主键详解** 在Java Persistence API (JPA) 中,主键是用于唯一标识实体的关键字段。在很多情况下,一个实体的主键可能不是由单一字段组成,而是由两个或更多个字段共同构成,这样的主键就被称为联合主键...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第15讲 JPA中的联合主键.avi
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它的目标是提供一种简单、高效的API,让...理解并正确使用联合主键对于构建高效、可靠的JPA应用程序至关重要。
在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来实现联合主键。 1. **@IdClass**:这种方式需要创建一个单独的类来表示联合主键,这个类需要实现Serializable接口,并且每个主键字段都用@Id注解标识。然后在...
在 Spring Data JPA 中,建立表的联合主键是一种常见的需求,本文将详细介绍如何使用 Spring Data JPA 建立表的联合主键,并提供了两种实现方式。 首先,我们需要了解什么是联合主键。在关系数据库中,主键是用于...
在 Java Persistence API(JPA)中,联合主键是指由多个字段组成的主键,可以使用@IdClass注解来实现。在本文中,我们将介绍如何使用@IdClass创建联合主键,并实现外部关联。 首先,我们需要创建三个实体类:...
在使用这个策略时,JPA会将主键的生成工作交由数据库完成,hibernate 不会介入。这意味着,数据库将负责生成主键,而不是hibernate。这种策略适用于大多数情况,因为它可以确保主键的唯一性和连续性。 uuid uuid是...
本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...
联合主键使用@EmbeddedId和@Embeddable注解,将多个字段组合成一个复合主键,适用于那些不满足单一主键条件的表。 以上就是JPA学习笔记中的关键知识点,涵盖了JPA的基本概念、环境配置、对象关系映射、查询语言、...
- 通常情况下,还需要指定外键字段(`mappedBy`)或者联合主键(`@PrimaryKeyJoinColumn`)来明确关联关系。 - **一对多关联**: - 使用`@OneToMany`注解表示一对多关系,通常还需要使用`@JoinColumn`或`@JoinTable`来...
联合主键(Composite Key)** - 当主键由两个或更多个字段组成时,可以使用`@IdClass`或`@EmbeddedId`来定义。 **7. 异步和缓存** - **异步处理**: 可以结合Java的ExecutorService或Spring的AsyncConfigurer进行...
8. **继承映射(Inheritance Mapping)**:JPA支持单表继承、联合继承和表格分层等策略,使你可以设计复杂的对象模型。 9. **懒加载(Lazy Loading)**:默认情况下,JPA实现如Hibernate支持懒加载,即关联的对象只...
#### 十、JPA联合主键 - **概念介绍**: - 联合主键是指使用多个字段共同组成一个复合主键。 - **应用场景**: - 当单个字段不足以唯一标识一条记录时,可以考虑使用联合主键。 - **实现方式**: - 通过在实体类上...
- **联合继承 (Joined Table Inheritance)**:每个子类对应数据库中的一个独立表,基类的公共属性存储在一个公共表中,子类的属性存储在子类表中,使用`@Inheritance(strategy=InheritanceType.JOINED)`。...
使用`@Inheritance(strategy=InheritanceType.JOINED)`,每个子类需要额外定义`@Entity`和`@PrimaryKeyJoinColumn`来指定主键和父类的关联。 3. **表格分区继承(Table per Concrete Class)**:每个具体类都有一个...