`
wsxiexiews
  • 浏览: 11143 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

近三天jpa学习

 
阅读更多

创建完persistence.xml后,需要对数据库中表进行entity映射,当然,也可以不事先创建表,使用在persistence中的配置来自动创建数据库中的表。我创建了两个实体entity,这两个实体entity我已经在数据库中事先创建好表和他们对应。

testuser类


import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Cacheable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import com.tao3c.dao.impl.TestUserDaoImpl;


@Entity
@Table(name = "test_user")
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "com.XXX.entity.TestUserEntity")
@NamedQueries({
	@NamedQuery(name=TestUserDaoImpl.QUERY_GETALLTESTUSER,query=TestUserDaoImpl.TESTUSER_GETALLUSER),
	@NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERBYCONDITION,query=TestUserDaoImpl.TESTUSER_GETUSERBYCONDITION),
	@NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERNORELATIONJOIN,query=TestUserDaoImpl.TESTUSER_GETNORELATIONJOIN)
})
public class TestUserEntity extends AbstractBaseEntity {

	private static final long serialVersionUID = -7139178611703146047L;
    public TestUserEntity(){
    	this.emails = new HashSet<TestEmailEntity>();
    }
	/**
	 * int TestUserEntity.java $id值
	 */
	@Id
	@TableGenerator(name = "TestUserGenerator", table = "id_testuser", pkColumnName = "GEN_KEY", pkColumnValue = "com.tao3c.testuser", valueColumnName = "GEN_VALUE", allocationSize = 10, initialValue = 11)
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "TestUserGenerator")
	@Column(name = "id", unique = true, nullable = false)
	private int id;
	@Column(name = "name")
	private String name;
	@Temporal(TemporalType.DATE)
	private Date regtime;
	@OneToMany(cascade={CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.REMOVE,CascadeType.MERGE},mappedBy="testuser")
	private Set<TestEmailEntity> emails;
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getRegtime() {
		return regtime;
	}

	public void setRegtime(Date regtime) {
		this.regtime = regtime;
	}

	public Set<TestEmailEntity> getEmails() {
		return emails;
	}

	public void setEmails(Set<TestEmailEntity> emails) {
		this.emails = emails;
	}
	public void addTestEmail(TestEmailEntity entity){
		this.emails.add(entity);
	}
}

 

testemails类

import javax.persistence.Cacheable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name="test_emails")
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "com.XXX.entity.TestUserEntity")
public class TestEmailEntity {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id")
    private int id;
	@Column(name="userid")
    private int userid;
	@Column(name="emailname")
    private String emailname;
	@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.REMOVE},optional=false)
	@JoinColumn(name="user_id")
	private TestUserEntity testuser;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	public String getEmailname() {
		return emailname;
	}
	public void setEmailname(String emailname) {
		this.emailname = emailname;
	}
	public TestUserEntity getTestuser() {
		return testuser;
	}
	public void setTestuser(TestUserEntity testuser) {
		this.testuser = testuser;
	}
}

 首先说明下,在testuser类中可以存在多个testemail 用来测试jpa的一对多和多对已的关系。

在testuser中

@Entity
@Table(name = "test_user")
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "com.XXX.entity.TestUserEntity")
@NamedQueries({
	@NamedQuery(name=TestUserDaoImpl.QUERY_GETALLTESTUSER,query=TestUserDaoImpl.TESTUSER_GETALLUSER),
	@NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERBYCONDITION,query=TestUserDaoImpl.TESTUSER_GETUSERBYCONDITION),
	@NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERNORELATIONJOIN,query=TestUserDaoImpl.TESTUSER_GETNORELATIONJOIN)
})

 

entity声明这是一个实体类,table声明了数据库中表的名称,如果不使用缓存策略的话可以将cacheable和cache去除,在cache中的region声明了缓存策略,这是在配置文件中配置的。namedqueries中事先定义了所要使用的sql,在查询中是使用类似于这样的语句进行查询

Query query  = entityManager.createNamedQuery(QUERY_GETTESTUSERBYCONDITION);

 同样也可以使用原生的jpql进行查询,直接使用jpql进行查询使代码看起来不简洁,对以后的维护不利。

/**
	 * int TestUserEntity.java $id值
	 */
	@Id
	@TableGenerator(name = "TestUserGenerator", table = "id_testuser", pkColumnName = "GEN_KEY", pkColumnValue = "com.tao3c.testuser", valueColumnName = "GEN_VALUE", allocationSize = 10, initialValue = 11)
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "TestUserGenerator")
	@Column(name = "id", unique = true, nullable = false)
	private int id;

 在这里id声明了entity的主键,TableGenerator对应于GeneratedValue中的generator,因为使用的主键生成策略是GenerationType.TABlE 既它的id键值是通过数据库中的一个表来生成的,这个你表的名字为id_testuser 该表有两个字段分别为gen_key 和gen_value 其实这个表中只需要一列就可以了, gen_key的值变为com.tao3c.testuser,gen_value的起始值为11,如果在这个表中没有11这一行,那么hibernate的实现中对initValue值是不起作用的这就需要自己手动的将该行插入到表中,设置gen_value的值为11,allocationSize 为每次取出多少的id值供后续使用,该属性不能取的太大,如果你频繁重启服务器的话,就会使id的值以allocationSize间隔跳跃。

@Temporal(TemporalType.DATE)
	private Date regtime;

 

为时间字段的映射

.......后续的内容在写了,先干活l

分享到:
评论

相关推荐

    spring教学视频第三天

    在“spring教学视频第三天”的课程中,我们深入学习了Spring框架的核心概念和技术,这是Java企业级应用开发的重要工具。Spring以其轻量级、模块化的设计理念,深受开发者喜爱。本教学视频的重点可能包括以下几个方面...

    Spring框架2016版黑马程序员第三天相关的资料

    6. **Spring Data**:Spring Data项目为各种数据存储(如JPA,MongoDB等)提供了统一的访问接口,简化了数据库操作。 7. **Spring Security**:这是一个强大的安全框架,用于保护Spring应用免受常见的攻击,如身份...

    学习JavaEE的day21

    在这一天的学习中,你可能学习了JSP的语法、指令、脚本元素、EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)的使用。 3. **EJB(Enterprise JavaBeans)**: EJB是JavaEE中的核心组件,...

    学习JavaEE的day20

    在这一天的学习中,你可能接触了实体类的定义,使用注解如@Entity、@Table、@Id等来映射数据库表,以及了解了如何进行CRUD(创建、读取、更新、删除)操作。 EJB(Enterprise JavaBeans)是JavaEE的另一大重要组件...

    学习JavaEE的day24

    这一天的学习可能涵盖了以下几个核心知识点: 1. **Servlet与JSP**:作为JavaEE的基础,Servlet是用于处理HTTP请求的Java类,而JSP(JavaServer Pages)则是一种动态网页技术,可以将Java代码嵌入到HTML中,使得...

    学习JavaEE的day23

    在学习JavaEE的第二十三天,我们将会深入探讨这个强大且广泛应用的企业级开发平台。JavaEE,全称为Java Platform, Enterprise Edition,是Oracle公司提供的一个用于构建分布式、多层企业应用的框架。它包含了多种...

    java连接数据库JDBC学习

    **第三天:JDBC优化与最佳实践** 在这一天,我们将探讨如何优化JDBC代码: 1. **使用连接池**:避免频繁创建和关闭连接,减少数据库负载。 2. **预编译SQL**:对于重复执行的SQL,使用`PreparedStatement`提高...

    学习JavaEE的day10

    在“Day10”这个压缩包文件中,可能包含了这一天学习的所有内容,比如Eclipse的安装包,一些示例代码,学习资料,以及可能的笔记和理解图。这些资源可以帮助你回顾和巩固当天的学习,通过实践加深对JavaEE开发的理解...

    Hibernate 学习笔记&代码.zip

    **第三天:CRUD 操作** 1. **增删改查**:利用 Session 的 save()、saveOrUpdate()、update()、merge() 方法实现对象的保存和更新;delete() 方法实现删除;get()、load() 方法获取对象;Query 和 Criteria API ...

    21天学通Java 21天学通Java(源码)

    11. **Java EE**:对于进阶学习者,可能会涉及到Java企业版(Java EE),包括Servlet、JSP、EJB、JMS、JPA等技术,用于开发服务器端应用程序。 通过21天的学习,读者应该能够熟练掌握Java编程的基础知识,并具备...

    springboot_demo1.zip

    SpringBoot是Spring框架的一种简化和快速开发方式,它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速上手构建独立的、生产级别的基于Spring的应用。在SpringBoot...

    传智播客 jbpm 21讲 第3天(共4天)

    这个系列课程分为四天,第三天的课程将更深入地探讨jbpm的某些关键特性。 【jbpm关键特性】 1. **流程建模**:jbpm支持使用Business Process Model and Notation (BPMN) 2.0,这是一种图形化的流程建模语言,让非...

    基于springboot与Vue开发的CMS系统源码+项目说明.zip

    有了它你只需要懂一点springboot 和 VUE即可在几天的时间内快速开发出一个简单的web应用。 【后端技术框架】 springboot + spring JPA + mysql 【前端技术框架】 VUE + VUEX + axios + adminLTE3 【注意】 1,本地...

    MyXind20180412

    这个文件很可能包含了作者在2018年4月12日这一天关于Java编程语言不同领域的学习内容。 【描述】中的“javaSE,javaWeb,J2EE框架的知识点”涵盖了Java开发的三个主要部分: 1. **Java SE(标准版)**:Java ...

    尚硅谷教学视频

    - **JPA视频教程**:介绍Java Persistence API规范,学习如何使用JPA进行对象关系映射。 - **SpringData视频**:学习Spring Data JPA等子项目,简化数据访问层的编码工作。 - **SSSP整合&分页视频**:整合Spring、...

    21天学通Java源代码

    13. **Java EE**:如果深入学习,可能还会涉及Java企业版(Java EE),包括Servlet、JSP、JPA、EJB等,这些都是构建Web应用程序的关键技术。 14. **Java 8及更高版本的新特性**:例如Lambda表达式、Stream API、...

    Testinside 310-052 最新更新

    根据给定的信息,我们可以推断出此...综上所述,本考试指南旨在帮助考生更好地理解Sun Certified Enterprise Architect for J2EE 5认证考试的要求和准备方法,通过提供最新的学习资源和模拟试题来提升考生的备考效率。

Global site tag (gtag.js) - Google Analytics