JPA使用
来源:互联网 发布:深圳行知职业学校地铁 编辑:程序博客网 时间:2024/06/01 19:49
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中
JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
JPA是JAVA EE5平台标准的ORM规范,得到所有的J2EE平台支持。JPA主要包括ORM映射元数据、JPA的API用来操作实体对象执行CRUD操作、查询语言三方面的技术。
ORM元数据的领域对象称为实体(Entity)按JPA的规范,实体具备以下条件:
1 必须使用javax.persistence.Entity注解或在XML映射文件中有对应的元素;(使用JPA就可省去过去复杂的hibernate与model的配置文件)
2 必须具有一个不带参数的构造函数,类不能声明为final,方法和需要持久化的属性也不能声明为final
3 如果游离状的实体对象需要以值得方式进行传递,如通过远程业务接口传递,则必须实现Serializable接口
4 需要持久化的属性 不能是public 必须通过实体类方法访问。
1)
(注意:persistence.xml文件的位置决定持久性的根(Persistence Root)。持久性的根为JAR文件或者包含META-INF目录(前提是persistence.xml位于此)的目录。一般将这个persistence.xml文件放在src下的META-INF中。命名及位置都不能变)
这是网上找的一段代码
<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_version=1"> <persistence-unit name="mysqlJPA" transaction-type="RESOURCE_LOCAL"> <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.username" value="root" /> <property name="hibernate.connection.password" value="123456" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db1" /> <property name="hibernate.max_fetch_depth" value="3" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence>
2 model
@Entity//实体@Table(name="APP_MOBILE_OS")//表名@org.hibernate.annotations.Table(appliesTo = "APP_MOBILE_OS", comment = "操作系统表 ")//与数据库表的关联public class MobileOS extends BaseObject{ private Long id; private String name; private String fileName; private Date createTime; private Set<MobileUserAgent> mobileUserAgents; private Integer version;
@Id @GeneratedValue(strategy= GenerationType.AUTO) @Column(name="NUMID")//主键的定义 public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name="VC2NAME",unique=true)//惟一的 public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name="VC2FILENAME")//字符 public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } @Column(name = "DATCREATETIME", length = 7) @Temporal(value= TemporalType.TIMESTAMP)//时间类型 public Date getCreateTime() { if(null==createTime) createTime=new Date(); return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } @OneToMany(mappedBy = "mobileOS", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH,CascadeType.REMOVE }) @BatchSize(size=50)//外键Set 一对多的关联 public Set<MobileUserAgent> getMobileUserAgents() { return mobileUserAgents; } public void setMobileUserAgents(Set<MobileUserAgent> mobileUserAgents) { this.mobileUserAgents = mobileUserAgents; } @Version//版本锁javax.persistence.* public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } @Override public String toString() { return null; //To change body of implemented methods use File | Settings | File Templates. }}
3)hibernate.cfg.xml配置
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <mapping class="com.xx.model.xx"/> </session-factory></hibernate-configuration>
· 如果我们有些属性不想被持久化到数据表中就使用@Transient
`两个实体使用相同数据表存储,只用一个字段区分时——
父表 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "区分字段名",discriminatorType = DiscriminatorType.INTEGER,length = 1)
@DiscriminatorValue(value="1")
在子类的开始处使用@DiscriminatorValue(value="2")
还有很多标签在此没有提到,以后还会补充
- JPA使用
- jpa使用
- jpa使用
- JPA 使用
- JPA学习笔记(二):JPA初步使用
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 使用 Spring Data JPA 简化 JPA 开发
- 通过logminer分析truncate与delete删除数据的效率问题
- 设备管理与维护TPM
- CV_IMAGE_ELEM读取某点的像素
- [图书连载]测试中心(Testing Center)(三)
- 如何有效的减少工厂浪费
- JPA使用
- 想起那些瞬间,还是会心痛
- android 开发
- 如何在C#中逐步实现加载自己用 C++ 语言编写的动态链接库
- Go语言 序列化反序列化二进制包
- hive数据定义
- [liferay 学习笔记]搭建liferay的开发环境
- #define
- 请帮忙解答,十分谢谢。下面的C++代码的宏定义是什么意思?