`
TRAMP_ZZY
  • 浏览: 132598 次
社区版块
存档分类
最新评论

JPA 2.0 简单映射

jpa 
阅读更多
// 通知持久化引擎该类是一个实体
@Entity
@Table(name = "employee", schema="springdao")
public class Employee implements Serializable {

	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = -581308461934077076L;

	// 注解了持久化标识,即唯一的标识键
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String name;
	private Long salary;
	private String phoneNum;
	
	@Basic(fetch = FetchType.LAZY)
	@Lob @Column(name = "picture")		// 大型对象的延迟加载
	private Byte[] picture;
	
	@Enumerated(EnumType.STRING)		// 默认的是插入序号 用插入值可以避免增加新的枚举类型序号的变化
	private EmployeeType type;
	
	@Temporal(TemporalType.DATE)		//java.util 日期类型需要指明隐射时JDBC处理的方式
	private Calendar dob;
	@Temporal(TemporalType.TIMESTAMP)
	private Date startDate;
	
	@Transient
	private String combineArrt;		// 忽略,不将其映射到数据库
	
	// 当定义双向一对多(或多对一)关系时:
	// 多对一一方是所有方,在该方定义连接列
	// 一对多是反方,所以必须使用 mappedBy 元素,否则会生成一个中间联结表
	@ManyToOne
	@JoinColumn(name = "dept_id")	// JoinColumn 来实现外键关联,默认的话为
	private Department department;	// 源实体中的关系特性的名称_目标实体的主键名 
									// 按照惯例逻辑映射先出现,因为物理映射有默认值
	@OneToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "pspace_id")
	private ParkingSpace parkingSpace;
	
	// 多对多关系的实现是中间表(join table),但是必须要有一方是mappedBy
	@ManyToMany
	@JoinTable(name = "emp_proj",
		joinColumns = @JoinColumn(name = "emp_id"),
		inverseJoinColumns = @JoinColumn(name = "proj_id")
			)
	private Collection<Project> projects;
	
	// 单项一对多关系,需要中间表
	@OneToMany
	@JoinTable(name = "emp_phone",
		joinColumns = @JoinColumn(name = "emp_id"),
		inverseJoinColumns = @JoinColumn(name = "phone_id")
			)
	private Collection<Phone> phones;
	
	public Employee() {}
	public Employee(Integer id) { this.id = id; }
	
	public Integer getId() {
		return id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public Long getSalary() {
		return salary;
	}
	
	public void setSalary(Long salary) {
		this.salary = salary;
	}
	
	public String getPhoneNum() {
		return phoneNum;
	}
	
	public void setPhoneNum(String phoneNum) {
		this.phoneNum = phoneNum;
	}
	
	public Byte[] getPicture() {
		return picture;
	}
	
	public void setPicture(Byte[] picture) {
		this.picture = picture;
	}
	
	public EmployeeType getType() {
		return type;
	}
	
	public void setType(EmployeeType type) {
		this.type = type;
	}
	
	public String getCombineArrt() {
		return this.id + "; " + this.name;
	}
	
	public void setCombineArrt(String combineArrt) {
		this.combineArrt = combineArrt;
	}
	
	public Calendar getDob() {
		return dob;
	}
	
	public void setDob(Calendar dob) {
		this.dob = dob;
	}
	
	public Date getStartDate() {
		return startDate;
	}
	
	public void setStartDate(Date startDate) {
		this.startDate = startDate;
	}
	
	public Department getDepartment() {
		return department;
	}
	
	public void setDepartment(Department department) {
		this.department = department;
	}
	
	public ParkingSpace getParkingSpace() {
		return parkingSpace;
	}
	
	public void setParkingSpace(ParkingSpace parkingSpace) {
		this.parkingSpace = parkingSpace;
	}
	
	public Collection<Project> getProjects() {
		return projects;
	}
	
	public void setProjects(Collection<Project> projects) {
		this.projects = projects;
	}
	
	@Override
	public String toString() {
		return "Employee [id=" + id + ", name=" + name + ", salary=" + salary
				+ ", phoneNum=" + phoneNum + ", picture="
				+ Arrays.toString(picture) + ", type=" + type + ", dob=" + dob
				+ ", startDate=" + startDate + ", combineArrt=" + combineArrt
				+ "]";
	}
}
 

@Entity
@Table(name = "addresstwo")
public class AddressTwo implements Serializable {

	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = 4003827955642961159L;

	@TableGenerator(name = "Address_Gen",
			table = "id_gen",
			pkColumnName = "gen_name",
			valueColumnName = "gen_val",
			pkColumnValue = "Addr_Gen",
			initialValue = 10000,
			allocationSize = 100)
	@Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "Address_Gen")
	private int id;
	private String name;
	
	public AddressTwo() {}
	public AddressTwo(int id, String name) {
		this.id = id;
		this.name = name;
	}
	
	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;
	}
	
	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
}

@Entity
@Table(name = "department")
public class Department implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String name;

	@OneToMany(mappedBy = "department")
	private Collection<Employee> employees;
	
	public Department() {}

	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 Collection<Employee> getEmployees() {
		return employees;
	}

	public void setEmployees(Collection<Employee> employees) {
		this.employees = employees;
	}

	@Override
	public String toString() {
		return "Department [id=" + id + ", name=" + name + ", employees="
				+ employees + "]";
	}
}

@Entity
@Table(name = "park_space")
public class ParkingSpace implements Serializable {
	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = 7356683100796513602L;
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private int lot;
	private String location;
	// 双向onetoone mappedBy 还是表明 Employee 是源实体,放在没有定义联结列的实体上
	@OneToOne(mappedBy = "parkingSpace")
	private Employee employee;
	
	public ParkingSpace() {}

	public int getId() {
		return id;
	}

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

	public int getLot() {
		return lot;
	}

	public void setLot(int lot) {
		this.lot = lot;
	}

	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}
	
	public Employee getEmployee() {
		return employee;
	}

	public void setEmployee(Employee employee) {
		this.employee = employee;
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
}

@Entity
@Table(name = "project")
public class Project implements Serializable {

	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = 7315080326584390902L;
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String proName;
	@ManyToMany(mappedBy = "projects")
	private Collection<Employee> employees;
	
	public Project() {}
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getProName() {
		return proName;
	}
	
	public void setProName(String proName) {
		this.proName = proName;
	}
	
	public Collection<Employee> getEmployees() {
		return employees;
	}
	
	public void setEmployees(Collection<Employee> employees) {
		this.employees = employees;
	}
	
	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
	
}

@Entity
@Table(name = "phone")
public class Phone implements Serializable {
	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = 682045004499830046L;
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private int type;
	private String num;
	
	public Phone() {}

	public int getId() {
		return id;
	}

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

	public int getType() {
		return type;
	}

	public void setType(int type) {
		this.type = type;
	}

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}

	@Override
	public String toString() {
		return "Phone [id=" + id + ", type=" + type + ", num=" + num + "]";
	}
}

@Entity
@Table(name = "head")
public class Head implements Serializable {
	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = 1856809533670124595L;
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String name;
	
	@OneToOne(optional = false, cascade = CascadeType.ALL)
	@JoinColumn(name = "nose_id")
	private Nose nose;
	
	public Head() {}

	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 Nose getNose() {
		return nose;
	}

	public void setNose(Nose nose) {
		this.nose = nose;
	}

	@Override
	public String toString() {
		return "Head [id=" + id + ", name=" + name + "]";
	}
	
}

@Entity
@Table(name = "nose")
public class Nose implements Serializable {
	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	
	private static final long serialVersionUID = 8615516251260117582L;
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String name;
	
	@OneToOne(mappedBy = "nose")
	private Head head;
	
	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 Head getHead() {
		return head;
	}

	public void setHead(Head head) {
		this.head = head;
	}

	@Override
	public String toString() {
		return "Nose [id=" + id + ", name=" + name + "]";
	}

}

/** 
 * ClassName:Animal <br/> 
 * Function: 嵌入对象 embedded object. <br/> 
 * Reason:   TODO ADD REASON. <br/> 
 * Date:     2014年7月4日 下午1:58:45 <br/> 
 * @author   zhangzhaoyu 
 * @version   
 * @since    JDK 1.7 
 * @see       
 */
@Entity
@Table(name = "animal")
public class Animal implements Serializable {
	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = 3295314624812247524L;
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String name;
	private String age;
	
	@Embedded
	private LiveAddress liveAddress;
	
	public Animal() {}

	public String getName() {
		return name;
	}

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

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Animal [id=" + id + ", name=" + name + ", age=" + age
				+ ", liveAddress=" + liveAddress + "]";
	}
}

/** 
 * ClassName:Bird <br/> 
 * Function: 重命名嵌入字段的值. <br/> 
 * Reason:   TODO ADD REASON. <br/> 
 * Date:     2014年7月4日 下午2:12:46 <br/> 
 * @author   zhangzhaoyu 
 * @version   
 * @since    JDK 1.7 
 * @see       
 */
@Entity
@Table(name = "exercise_bird")
public class Bird implements Serializable {
	/**
	 * serialVersionUID:TODO
	 * @since JDK 1.7
	 */
	private static final long serialVersionUID = -317303554096481889L;
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String name;
	
	@Embedded
	@AttributeOverrides({
		@AttributeOverride(name = "state", column = @Column(name = "bird_state")),
		@AttributeOverride(name = "zip", column = @Column(name = "bird_zip"))
	})
	private LiveAddress liveAddress;
	
	public Bird() {}

	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 LiveAddress getLiveAddress() {
		return liveAddress;
	}

	public void setLiveAddress(LiveAddress liveAddress) {
		this.liveAddress = liveAddress;
	}

	@Override
	public String toString() {
		return "Bird [id=" + id + ", name=" + name + ", liveAddress="
				+ liveAddress + "]";
	}
}

/** 
 * ClassName:LiveAddress <br/> 
 * Function: 嵌入对象 embedded object. <br/> 
 * Reason:   TODO ADD REASON. <br/> 
 * Date:     2014年7月4日 下午2:01:44 <br/> 
 * @author   zhangzhaoyu 
 * @version   
 * @since    JDK 1.7 
 * @see       
 */
@Embeddable @Access(AccessType.FIELD)
public class LiveAddress implements Serializable {

	private String street;
	private String city;
	private String state;
	@Column(name = "zip_code")
	private String zip;
	
}
分享到:
评论

相关推荐

    jpa2.0(JSR-317) 规范 包含javadoc

    该草案获得JSR-317专家组全部通过 新增了大量的特性包括类型安全的动态查询(Criteria API );加入了大量必须的 ORM 映射增强特性;标准的二级缓存,标准的 JDBC ... 目前hibernate 3.5 已经提供了jpa2.0的全部实现;

    Pro JPA 2 Mastering the Java Persistence API free down

    JPA2.0 加入了大量必须的 ORM 映射增强特性,包括:支持通过使用 @ElementCollection 标注来增强 collections, maps 和 lists( 这里不是指实体之间的关联关系 ) 集合,支持 map 的单向 one-to-many 关联 (JPA1.0...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.1.2 JPA的映射规则 367 10.1.3 JPA规范简介 368 10.2 实体入门 368 10.2.1 开发实体 369 10.2.2 在Java SE环境下使用 Hibernate JPA实现 370 10.2.3 在Java SE环境下使用 TopLink JPA实现 374 10.2.4 在Java SE...

    agoncal-book-javaee7

    开始Java EE 7 书的结构 第1节-简介 第1章-Java EE 7环境 第2节-相互关注 第2章-上下文和依赖... Chapter02:JPA 2.0简介 Chapter03:JPA映射 Chapter04:JPA实体管理器和JPQL Chapter05:JPA生命周期和侦听器 第06

    jsf-seam-jpa文档

    什么是Seam? 1. 整合和强化Java EE框架 2. 一个为ORM设计的Web框架 ...4. 支持Web 2.0 5.依赖双向映射的Pojo服务 6.非常规的配置 7.避免滥用XML 8.为测试而设计 9. 卓越的工具支持 10. 让我们开始编码吧

    Spring 2.0 开发参考手册

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...

    支持多数据库的ORM框架ef-orm.zip

    JPA 2.0为了弥补JPA1.0的不足,才将这种Query的思想引入为框架中的另一套查询体系——Criteria API。事实上针对单个对象的get/load/persist/save/update/merge/saveOrUpdate API和Criteria API本来就为一体,只不过...

    springboot-guide:SpringBoot2.0+从入门到实战!

    JPA : 、 拦截器和过滤器 : 、 MyBatis : 、 (TODO:早期文章,不建议阅读,待重构~) 进阶 Bean映射工具 : 、 补充 实战项目 说明 项目 logo 由 生成。 利用 docsify 生成文档部署在 Github Pages 和 Gitee ...

    springboot-guide:Not only Spring Boot but also important knowledge of Spring(不只是SpringBoot还有Spring重要知识点)

    Bean映射工具 :Bean映射工具之Apache BeanUtils VS Spring BeanUtils 、5种常见Bean映射工具的性能比对 如何在 Spring/Spring Boot 中优雅地做参数校验? 使用 PowerMockRunner 和 Mockito 编写单元测试用例 5分钟...

    JAVA程序开发大全---上半部分

    19.2.1 简单的插件开发 328 19.2.2 创建一个空白的插件项目 331 19.3 RCP应用程序的开发 333 19.3.1 RCP应用开发初步 333 19.3.2 创建用户自定义的菜单和工具条 338 19.4 本章小结 341 第20章 网上宠物商店(JSP+...

    spring-boot-base:spring boot 2.0 基础教程,日志配置,数据源配置,事务管理等

    Boot2基础:配置系统全局异常映射处理 04 Boot2基础:定时任务和异步任务的使用方式 05 Boot2基础:多个拦截器配置和使用场景 06 Boot2基础:引入JdbcTemplate,和多数据源配置 07 Boot2基础:集成Druid连接池,配置...

    java文集

    Java 6 RowSet 使用完全剖析 结合Spring2.0和ActiveMQ进行异步消息调用 struts+hibernate增删改查(一) AXIS 布署问题 struts+hibernate增删改查(二) MySQL中如何实现Top N及M至N段的记录查询?...

    SpringBoot新手学习手册

    4.3、springboot整合使用springjpa 18 4.4、springboot整合多数据源 19 五、 事物管理 25 5.1.1SpringBoot整合事物管理 25 5.1.2SpringBoot分布式事物管理 25 六、 日志管理 30 6.1使用log4j记录日志 30 6.2...

    RESTCloudAPI:适用于云的 REST API - 我在 Coursera 课程中的作业

    此外,视频数据必须存储在 Spring Data JPA 存储库中。 最后,所有通信都必须通过 https 端口 8443 进行。在嵌入式 Tomcat 实例上设置 HTTPS 的代码包含在 Application 类中。 您应该注意,此分配还需要在第一个...

    android4-potlatch-server:Coursera“Android Capstone 项目”,Potlatch 服务器

    此外,视频数据必须存储在 Spring Data JPA 存储库中。 最后,所有通信都必须通过 https、端口 8443 进行。在嵌入式 Tomcat 实例上设置 HTTPS 的代码包含在 Application 类中。 您应该注意,此分配还需要在第一个...

    spring chm文档

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. ...

    springboot-guide:不仅是Spring Boot,而且是Spring的重要知识(不只是SpringBoot还有Spring重要知识点)

    guide(上面的地址访问速度缓慢的建议使用该路径访问)重要知识点基础异常处理: , JPA : , 拦截器和过滤器: , MyBatis : , (TODO:早期文章,不建议阅读,待重构〜)进阶Bean映射工具: ,补充实战项目面试...

    Spring in Action(第2版)中文版

    6.4.3在spring2.0里声明事务 6.4.4定义注释驱动事务 6.5小结 第7章保护spring 7.1springsecurity介绍 7.2验证用户身份 7.2.1配置providermanager 7.2.2根据数据库验证身份 7.2.3根据ldap仓库进行身份验证 ...

    Spring in Action(第二版 中文高清版).part2

    6.4.3 在Spring 2.0里声明事务 6.4.4 定义注释驱动事务 6.5 小结 第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份 7.2.1 配置Provider Manager 7.2.2 根据数据库验证身份 7.2.3 根据LDAP仓库...

    Spring in Action(第二版 中文高清版).part1

    6.4.3 在Spring 2.0里声明事务 6.4.4 定义注释驱动事务 6.5 小结 第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份 7.2.1 配置Provider Manager 7.2.2 根据数据库验证身份 7.2.3 根据LDAP仓库...

Global site tag (gtag.js) - Google Analytics