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注解开发的更多相关文章

  1. Hibernate注解开发详解

    *****************关于注解的简单介绍 详细介绍请点击这里注解详细教程 package com.tomowork.pojo; import org.hibernate.annotatio ...

  2. Hibernate注解开发、注解创建索引

    1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系 ...

  3. (转) Hibernate注解开发

    http://blog.csdn.net/yerenyuan_pku/article/details/70162268 Hibernate注解开发 在Hibernate中我们一般都会使用注解,这样可以 ...

  4. Hibernate注解开发教程

    目录 第一章 类级别注解 1-1 本章简介 一.Hibernate注解简介 二.JPA与Hibernate的关系 三.Hibernate注解的分类 1-2 准备工作 1-3 @Entity注解 1-4 ...

  5. Spring注解开发系列Ⅵ --- AOP&事务

    注解开发 --- AOP AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,横向重复,纵向抽取.详细的AO ...

  6. SpringMVC注解开发初步

    一.(补充)视图解析器---XmlViewResolver 作用:分离配置信息. 在视图解析器---BeanNameViewResolver的基础之上进行扩充,新建一个myView.xml分离信息 在 ...

  7. SpringMVC的注解开发入门

    1.Spring MVC框架简介 支持REST风格的URL 添加更多注解,可完全注解驱动 引入HTTP输入输出转换器(HttpMessageConverter) 和数据转换.格式化.验证框架无缝集成 ...

  8. Struts2框架之-注解开发

    Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...

  9. Java自定义注解开发

    一.背景 最近在自己搞一个项目时,遇到可需要开发自定义注解的需求,对于没有怎么关注这些java新特性的来说,比较尴尬,索性就拿出一些时间,来进行研究下自定义注解开发的步骤以及使用方式.今天在这里记下, ...

随机推荐

  1. day17——序列化、os、sys、hashlib、collections

    day17 序列化 json 两组4个方法: 1.dumps(序列化) -- loads(反序列) dumps(list):将对象转换成字符串 loads(str):将字符串转换成对象 list--s ...

  2. Linux基础(10)AIO项目设计与POSIX文件操作和目录管理

    实现fast-cp :拷贝文件到目标对象 Linux的七种文件类型 :https://blog.csdn.net/linkvivi/article/details/79834143 ls -al :h ...

  3. 【实战经验】--Xilinx--IPcore--PLL生成

    用途: PLL用于产生自己想要的时钟,可以倍频有可以分频,通常倍频. 生成: 1.打开ISE—— Project —— New source,选择IP(CORE Generator & Arc ...

  4. Windows下使用MongoDb的经验

    随着NoSql广泛应用MongoDb这个Json数据库现在也被广泛使用,接下来简单介绍一下Windows下如使安装使用MongoDb. 一.安装MongoDb 1.首先去官方网址:(https://w ...

  5. 安装VMware14可能出现的问题

    未能提取文件 安装程序未能提取安装vmware workstation所必须的文件 在没有关闭这个弹框的前提下,Win+R输入%temp%,找到以~setup结尾的文件夹,双击下面的临时文件VMwar ...

  6. LocalStorageUtils

    对localStorage进行封装: var LocalStorageUtils = new function (){ if(window.localStorage==null){ throw new ...

  7. 数组的push()、pop()、shift()和unshift()方法

    JavaScript的数组是一个拥有堆栈和队列自身优点的global对象.也就是说JavaScript数组可以表现的像栈(LIFO)和队列(FIFO)一样操作.这也是JavaScript数组强大的可操 ...

  8. python关于try except的使用方法

    一.常见错误总结 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入 ...

  9. mysql DCL数据控制语言

    -- 维护性操作   都是在cmd下操作的连接数据库:        本机:mysql [-h localhost] -u account -p        远程:mysql [-h remote_ ...

  10. windows mysql 5.5.62 安装

    下载链接: https://dev.mysql.com/downloads/installer/ mysql下载这边有句话,虽然是32位的安装包,但是可以装在32位和64位上. 建议迅雷下载. 然后打 ...