1.先建表,后跟据表来编写配置文件和实体bean
2.先编写配置文件和实体bean,后建表
注: 1,加入hibernate\lib\jpa中的jpa2.0的jar包
2。将JRE System Library的jdk设置成1.6以上版本
3,将ejb3-persistence去掉
hibernate-jpa-2.0-api-1.0.0.Final和ejb3-persistence有冲突,如果升级到Hibernate3.5那么
可以把ejb3-persistence干掉
jpa所用到的jar包
1.hibernate核心包(8个文件)
2.hibernate注解包(3个文件)
hibernate-annotations.jar
lib\ejb3-persistence.jar
hibernate-commons-annotations.jar
3.hibernate针对jpa的实现包(3个文件)
hibernate-entitymanager-3.4.0.GA
hibernate-eneitymanager.jar
lib\test\log4j.jar
slf4j12.jar
jpa的配置文件
放在类路径下的met-inf目录下persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- transaction-type定义事物类型(全局事物,本地事物) -->
<persistence-unit name="simple" transaction-type="RESOURCE_LOCAL">
<!--
<provider>org.hibernate.ejb.HibernatePersistence</provider>
-->
<properties>
<!-- 数据库方言 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/>
<property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/testjpa?useUnicode=treu&characterEncoding=UTF-8"/>
<property name = "hibernate.connection.username" value = "root"/>
<property name = "hibernate.connection.password" value = "yue4512138"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
实体bean
1. @Entity
加注解javax.persistence.Entity
2.@Id(可以标注在属性上面,也可以标注在属性的get方法上面)
实体标识属性
@GeneratedValue生成主键的方式
Strategy=
Auto:JPA根据数据库的情况自己生成主键
Identity:数据库自增
Sequence:序列
Table:表
3.列属性设置
@Column
name:列名
unique:是否唯一
nullable:是否允许为空
4.指定表名
@Table
name:指定生成表的表名
catalog:数据库的名字(一般不用)
5.日期
@Temporal(TemporalType.TIME,TemporalType.Date,TemporalType. TIMESTAMP)
6.枚举类型
@Enumerated(EnumType.STRING)
7.@Lob大数据类型 字节数组
是否延迟加载
@basic(fetch=FetchType.LAZY)
8.该字段不与数据库映射
@Transient
jap中的状态
1.new 新建状态
2.managed 托管状态
3.游离状态(脱管)
4.删除状态
注:如果实体处与事物关联并处于托管状态,如果更改属性则可同步到数据库
//将实体变为游离态
entityManager.clear();
api
entityManager.refersh(实体名);//刷新当前实体内容(数据库作修改操作后)
1.保存一个实体
EntityManagerFactory factory=Persistence.createEntityManagerFactory("testjpa");
EntityManager entityManager=factory.createEntityManager();
//开启事物
entityManager.getTransaction().begin();
entityManager.persist(new Person("岳振华"));
entityManager.getTransaction().commit();
entityManager.close();
factory.close();
2.按标识查询一个实体(可以不开启事物)
// 方法一 类似于get
找不到会返回null
Person person=entityManager.find(Person.class, 1);
//方法二 返回代理对像,
如果不操作该对像,则不查询数据库 如果找不到会报异常
Person person=entityManager.getReference(Person.class, 1);
3. 更新实体
Person person=entityManager.find(Person.class, 1);
System.out.println("姓名:"+person.getName()+" 性别:"+person.getSex());
//将实体变为游离态
entityManager.clear();
person.setName("岳振华");
//将游离状态的实体同步到数据库
entityManager.merge(person);
4.删除实体
Person person=entityManager.find(Person.class, 1);
System.out.println("姓名:"+person.getName()+" 性别:"+person.getSex());
entityManager.remove(person);
查询语句
//查询
EntityManagerFactory emFactory=Persistence.createEntityManagerFactory("testjpa");
EntityManager em=emFactory.createEntityManager();
em.createQuery("select o from person o where o.id=? ");
//删除
Query query=entityManager.createQuery("delete from Person where name =:name");
query.setParameter("name", "岳振华");
query.executeUpdate();
一对多双向关联 多的一端为维护端(外键记录的更新) 默认是延迟加载
@OneToMany(cascade=CascadeType.PERSIST) 级联保存persist
CascadeType.MERGE 级联合并(更新)merge
CascadeType.REFRESH 级联刷新
CascadeType.REMOVE 级联删除
fetch=FetchType.EAGER 不延迟
fetch=FetchType.LAZY 延迟
mappedBy="Order"对方的某个属性名维护(多的一方维护)
@ManyToOne(cascade=CascadeType.PERSIST,
optional=true)//可选可以为空
分享到:
相关推荐
【JPA学习笔记】 JPA(Java Persistence API)是Java平台上的一个ORM(Object-Relational Mapping)规范,它提供了一种将Java对象与数据库表进行映射的机制,简化了数据库操作。JPA允许开发者使用面向对象的方式...
**Java Persistence API (JPA)** 是Java平台上的...以上就是JPA学习笔记中的关键知识点,涵盖了JPA的基本概念、环境配置、对象关系映射、查询语言、事务管理、关联关系等多个方面,对于理解和应用JPA有重要的指导作用。
传智播客——JPA学习笔记 网络上有一份pdf格式的《JPA学习笔记》,但是内容排版有点乱,而且有缺失的部分,小弟从原来的blog处拷贝出来,并加以排版,制作成了chm格式的,大家应该知道chm格式比较适合作为参考资料或...
### JPA学习笔记-EJB-02JPA属性注解 #### 一、引言 在上一篇文章中,我们简要介绍了Java Persistence API (JPA)的基础知识,包括它的基本部署和操作流程,从而让我们对JPA有了初步的认识。本文将继续深入探讨JPA的...
### Spring-data-jpa 学习笔记 #### 一、spring-data-jpa的简单介绍 Spring Data JPA 是 Spring Data 的一部分,它简化了基于 Java Persistence API (JPA) 的数据访问层开发工作。Spring Data 旨在减少数据访问层...
在"spring-data-JPA学习笔记"中,我们主要关注的是如何使用JPA进行CRUD操作以及一些常用的查询方法。 首先,Spring Data JPA 提供了一种基于方法名的自动查询映射机制。例如,`findByUsernameAndPassword(String ...
本篇笔记主要聚焦于JPA的关联映射,这是JPA中一个重要的概念,用于定义实体之间的关系。 关联映射允许我们将数据库中的表关系映射到Java对象的关联上。在Hibernate中,这些关系通常通过XML配置文件来定义,而在JPA...
本篇学习笔记主要探讨了JPA中实体的状态及其转换,包括New、Managed、Detached和Removed四种状态。 首先,实体(Entity)是JPA中的核心概念,它代表数据库中的一个记录。实体的身份(Identity Fields)用于唯一标识...
### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...
### JPA实体对象状态 #### 一、实体对象的状态分类 在Java Persistence API (JPA) 中,实体对象的状态管理是实现数据持久化的基础之一。根据实体对象与实体管理器(EntityManager)之间的交互关系,实体对象可以...
JPA学习笔记** 学习笔记可能涉及更深入的话题,如: - **懒加载(Lazy Loading)与急加载(Eager Loading)**: 管理关联对象的加载时机。 - **继承映射(Inheritance Mapping)**: 包括单表继承、联合继承和表格...