Hibernate注解式开发:

  (1)注解式开发的注意点:

    Hibernate中使用注解,主要是为了替代映射文件,完成“类到表,属性到字段”的映射。 
    JPA提供了一套功能强大的注解。Hibernate直接使用了JPA的这套注解。当然,对于JPA中的一些不足,Hibernate又开发了一些自己的注解。这些注解要么继承自JPA,要么是独立的注解,作为JPA的补充。 
    故,我们使用的注解,基本是javax.persistence.Transient包中的。 使用注解时需注意以下几点: 
      (1)使用的均为javax.persistence.Transient包中的注解

      (2)不再需要映射文件了

      (3)在Hibernate主配置文件中无需指定映射文件了,但需要指定注解的实体类。

  (2)示例一(基本注解):

 @Entity   //表明当前类为实体类
@Table(name="t_student") //可以省略
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) //表明主键值由数据库自己来维护
private Integer id;
@Basic //表明当前属性将被持久化导数据库中,该注解为属性的默认注解,可以省略
@Column(name="tname")
private String name;
@Basic //表明当前属性将被持久化导数据库中,该注解为属性的默认注解
@Column(name="tage")
private int age;
@Transient //表明当前属性将不写到数据库中
private double score;

   示例二(使用Hibernate内置主键生成策略):

 @Entity
public class Student {
@Id
@GeneratedValue(generator="xxx") //使用自己定义的主键生成器
@GenericGenerator(name="xxx", strategy="native") //生成一个主键生成器,目的是为了使用Hibernate自带的主键生成策略
private Integer id;
private String name;
private int age;
@Transient //表明当前属性将不写到数据库中
private double score;

   示例三(一对多双向关联,并且一方放弃关联关系维护权):

 @Entity
public class Country {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; //mappedBy="country" 表示一方放弃维护权,并将维护权交给了对方的关联属性country
@OneToMany(targetEntity=Minister.class, cascade=CascadeType.ALL, mappedBy="country") //targetEntity可以省略
//一旦一方放弃了维护权,则@JoinColumn注解将不能使用
//@JoinColumn(name="countryId")
private Set<Minister> ministers;
 @Entity
public class Minister {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer mid;
private String mname; @ManyToOne(targetEntity=Country.class, cascade=CascadeType.ALL) //注意:这里只能使用ALL,因为注解是JPA的注解,如果不用ALL,就对Hibernate的代码不起作用
@JoinColumn(name="countryId")
private Country country; //关联属性

   示例四(自关联):

 @Entity
//新闻栏目
public class NewsLabel {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name; //栏目名称
private String content; //栏目内容 @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid")
private NewsLabel parentNewsLabel; //父栏目 @OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="pid")
private Set<NewsLabel> childNewsLabels; //子栏目

   示例五(多对多双向关联,代码更简单,无需指定中间表,因为底层实现了很多):

 @Entity
public class Course {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; //多对多双向关联的注解,要求有一方要放弃维护权。否则,将要生成两张中间表,当然只有一张中间表起作用
@ManyToMany(cascade=CascadeType.ALL, mappedBy="courses")
private Set<Student> students;
 @Entity
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer sid;
private String sname; @ManyToMany(cascade=CascadeType.ALL)
private Set<Course> courses;

   示例六(二级缓存,Query缓存不能使用注解):

 @Entity
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Country {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; @OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="countryId")
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
private Set<Minister> ministers;
 @Entity
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Minister {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer mid;
private String mname; @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="countryId")
private Country country; //关联属性

最新文章

  1. nginx服务器安装及配置文件详解
  2. JavaScript prototype 使用介绍
  3. oracle,sqlserver同一个表两个字段和成一个列查询 (详询请加qq:2085920154)
  4. (三)相遇射线的3D碰撞盒
  5. Theme.AppCompat.Light报错
  6. 字符排序(hdoj1106)
  7. .NET + Jcrop 实现在线裁图功能
  8. Bash ShellShock 解决办法
  9. Java ee 与安卓环境搭建个人心得
  10. 掌握一门语言Go
  11. 推荐一些iOS博客
  12. Spring的核心模块解析
  13. react-redux笔记
  14. 698. Partition to K Equal Sum Subsets 数组分成和相同的k组
  15. 如何使用Visual Studio 2017调试.net库源代码
  16. @ConfigurationProperties和@Value 注入
  17. 一篇很好的java异常框架讲解
  18. Unity--- 纹理设置属性 alphaIsTransparency
  19. fedora 开启 apache 并 开启目录浏览模式
  20. 嵌入式之UBOOT

热门文章

  1. 子类使用父类的方法 或属性时候 里面的this 代表的是自己
  2. Shell脚本创建Nginx的upstream及location配置文件
  3. vue自动路由-单页面项目(非build时构建)
  4. Jmeter—添加断言 判断接口响应数据是否符合预期
  5. linux系统下 git 使用教程
  6. Android Room使用详解
  7. 洛谷 P2751 [USACO4.2]工序安排Job Processing 解题报告
  8. LGP5075【JSOI2012】分零食
  9. Luogu P3251 [JLOI2012]时间流逝 期望dp
  10. pytorch文档阅读(一)