JPA注解开发
JPA注解开发
jpa是sun公司的一个ORM规范,只有接口和注解,没有具体实现。
jpa是EJB3中的。
单表常用注解
书写注解,并配置
@Entity
@Table(name = "c_book")
public class Book {
@Id
//主键策略
// @GeneratedValue(strategy=GenerationType.AUTO)//native
@GenericGenerator(name="wc",strategy="uuid")
@GeneratedValue(generator="wc")//生成uuid
private String id;
@Column(name="cname",length=20,nullable=false,unique=true)
配置Hibernate.cfg.xml
<!-- 映射配置文件 -->
<mapping class="cn.it.entity.Book"/>
主键相关的:
Auto相当与native,默认值
自定义主键策略(下面使用hibernate的实现):
属性字段官方参考配置:
注解:可以放到属性上面设置,也可以在getter方法上设置,效果一样。
多表常用注解
一对多
新建订单表实体类,并与客户表建立实体关系。
@Entity
@Table(name="w_customer") @NamedQuery(name="Customer.findAll",query="from Customer")
@NamedQueries(value=@NamedQuery(name="Customer.findAll2",query="from Customer"))
public class Customer {
@Id
@GeneratedValue
private Integer id;
private String name;
private String city;
@OneToMany(mappedBy="customer",//by 1 的一方 :在Order实体类中属性customer
cascade=CascadeType.ALL,//级联 不包含 all-delete-orphan
fetch=FetchType.LAZY,//懒加载
orphanRemoval=true,//支持孤儿删除 delete-orphan
targetEntity=cn.it.entity.Order.class//一般忽略 ,Order是接口的化,这里配置实现类的指定
)
private Set<Order> orders = new HashSet<Order>();
--------------------------------------------------------------------------------------------------------------------------------------------
@Entity
@Table(name="w_order")//表名
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private Double price;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="c_id")//自定义关联外键属性 映射表中字段名为c_id 覆盖了默认的customer_id
@Fetch(FetchMode.SELECT)//单表查询
@LazyToOne(LazyToOneOption.PROXY)//代理懒加载
private Customer customer;
核心配置
<mapping class="cn.it.entity.Order"/>
<mapping class="cn.it.entity.Customer"/>
多对多
示例:学生和课程
@Entity
@Table(name="t_course")
public class Course {
//注解主键
@Id
@GenericGenerator(name="wc",strategy="assigned")
@GeneratedValue(generator="wc")//生成随机数
private Integer id;
private String name;
@ManyToMany
@JoinTable(name="t_student_course",//配置中间表
joinColumns=@JoinColumn(name="c_id"),//自定义关系表name
inverseJoinColumns=@JoinColumn(name="s_id")//对方的外键名称
)
private Set<Course> course=new HashSet<Course>();
--------------------------------------------------------------------------------------------------------------------------------------------
@Entity
@Table(name="t_student")
public class Student {
//注解主键
@Id
@GenericGenerator(name="wc",strategy="assigned")
@GeneratedValue(generator="wc")//生成随机数
private Integer id;
private String name;
@ManyToMany
@JoinTable(name="t_student_course",//配置中间表
joinColumns=@JoinColumn(name="s_id"),//自定义关系表name
inverseJoinColumns=@JoinColumn(name="c_id")//对方的外键名称
)
private Set<Course> course=new HashSet<Course>();
核心配置
<mapping class="cn.it.entity.Student"/>
<mapping class="cn.it.entity.Course"/>
命名查询
@NamedQueries(value={
@NamedQuery(name="Customer.findAll",query="from Customer"),
@NamedQuery(name="Customer.findAll2",query="from Customer")
})
测试:
List<Customer> list = session.getNamedQuery("Customer.findAll").list();
System.out.println(list.get(0).getOrders());
JPA注解开发的更多相关文章
- Hibernate注解开发详解
*****************关于注解的简单介绍 详细介绍请点击这里注解详细教程 package com.tomowork.pojo; import org.hibernate.annotatio ...
- Hibernate注解开发、注解创建索引
1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系 ...
- (转) Hibernate注解开发
http://blog.csdn.net/yerenyuan_pku/article/details/70162268 Hibernate注解开发 在Hibernate中我们一般都会使用注解,这样可以 ...
- Hibernate注解开发教程
目录 第一章 类级别注解 1-1 本章简介 一.Hibernate注解简介 二.JPA与Hibernate的关系 三.Hibernate注解的分类 1-2 准备工作 1-3 @Entity注解 1-4 ...
- Spring注解开发系列Ⅵ --- AOP&事务
注解开发 --- AOP AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,横向重复,纵向抽取.详细的AO ...
- SpringMVC注解开发初步
一.(补充)视图解析器---XmlViewResolver 作用:分离配置信息. 在视图解析器---BeanNameViewResolver的基础之上进行扩充,新建一个myView.xml分离信息 在 ...
- SpringMVC的注解开发入门
1.Spring MVC框架简介 支持REST风格的URL 添加更多注解,可完全注解驱动 引入HTTP输入输出转换器(HttpMessageConverter) 和数据转换.格式化.验证框架无缝集成 ...
- Struts2框架之-注解开发
Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...
- Java自定义注解开发
一.背景 最近在自己搞一个项目时,遇到可需要开发自定义注解的需求,对于没有怎么关注这些java新特性的来说,比较尴尬,索性就拿出一些时间,来进行研究下自定义注解开发的步骤以及使用方式.今天在这里记下, ...
随机推荐
- Centos7下RabbitMQ的安装与配置
具体按照步骤以此为准 第一步:安装最新版的erlang依赖 通过github设置版本号:https://github.com/rabbitmq/erlang-rpm vi /etc/yum.repos ...
- day07——数据类型补充、坑、二次编码
day07 数据类型补充 str 首字母大写:capitalize() name = 'alex' name1 = name.capitalize() print(name1) 每个单词首字母大写:t ...
- Ubuntu中shell脚本无法使用source命令的原因与解决方法
本文简要描述了在ubuntu系统下无法使用source命令的原因,及对应的两种解决方法,并在附录中引用一篇文章来详细解释source命令的用法 问题: 由于在交叉编译时,需要在当前shell内执行so ...
- Spark之RDD容错原理及四大核心要点
一.Spark RDD容错原理 RDD不同的依赖关系导致Spark对不同的依赖关系有不同的处理方式. 对于宽依赖而言,由于宽依赖实质是指父RDD的一个分区会对应一个子RDD的多个分区,在此情况下出现部 ...
- 对于Node中Express框架的中间件概念的感知
中间件是什么呢? 中间件就是客户端http请求发起传送到服务器和服务器返回响应之间的一些处理函数. 为什么要使用中间件? 通过中间件,可以对数据进行操作使得我们能方便地操作请求数据编写服务器响应.如b ...
- Java 阿拉伯数字转换为中文大写数字
Java 阿拉伯数字转换为中文大写数字 /** * <html> * <body> * <P> Copyright 1994 JsonInternational&l ...
- Ambari深入学习(II)-实现细节
在第一节中,我们简单讲了一下Ambari的系统架构.我们这一节主要分析Ambari的源代码,总览Ambari的具体实现方式及其工作细节. 一.Ambari-Server启动 Ambari-Server ...
- 在Centos6.5上部署kvm虚拟化技术
KVM是什么? KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hyperv ...
- 如何解决NoSuchMethodError
背景 工作中写单测,本来用的Mockito,但是为了mock方法里调用的其他静态方法,所以需要使用powermock,于是开始报错. 我把包引入了,然后照着网上的写单测代码,写完了之后运行.噩梦开始. ...
- php正则表达式中preg_match_all函数的详解
php正则表达式中的函数我们之前为大家结果一个preg_match函数,相信大伙对此有所了解,那么php正则表达式中preg_match_all函数的具体使用是如何的呢?今天我们就带大家了解php正则 ...