`
星夜的遐想
  • 浏览: 186815 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JPA的注解小结

 
阅读更多

在开发中基于注解的方式配置数据表与是实体之间的关联在开发过程中还是很实用的,可以大大节约开发时间,在此对几个常用的注解做下小结:

 

1、@Entity(name="EntityName")   必须
name为可选(当存在多个同名类时,指定全路径可以避免冲突),对应数据库中一的个表

 

2、@Table(name="",catalog="",schema="")  可选
通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息
name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名
catalog:可选,表示Catalog名称,默认为Catalog("").
schema:可选,表示Schema名称,默认为Schema("").

 

3、@Id 必须
@Id定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键.置于getXxxx()前.

4、@GeneratedValue(strategy=GenerationType,generator="") 可选
strategy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4种,分别表示让ORM框架自动选择,
根据数据库的Identity字段生成,根据数据库表的Sequence字段生成,以有根据一个额外的表生成主键,默认为AUTOgenerator:表示主键生成器的名称,这个属性通常和ORM框架相关,例如,Hibernate可以指定uuid等主键生成方式.

示例:
 @Id
 @GeneratedValues(strategy=StrategyType.SEQUENCE)
  public int getPk() {
     return pk;
  }

   

5、@Column 可选
@Column描述了数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有作用.
name:表示数据库表中该字段的名称,默认情形属性名称一致
nullable:表示该字段是否允许为null,默认为true
unique:表示该字段是否是唯一标识,默认为false
length:表示该字段的大小,仅对String类型的字段有效
insertable:表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为true
updateable:表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true.对于一经创建就不可以更改的字段,该属性非常有用,如对于birthday字段.
columnDefinition:表示该字段在数据库中的实际类型.通常ORM框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP.此外,String的默认映射类型为VARCHAR,如果要将String类型映射到特定数据库的BLOB或TEXT字段类型,该属性非常有用.

示例:
@Column(name="BIRTH",nullable="false",columnDefinition="DATE")
 public String getBithday() {
      return birthday;
 }

  

6、@Transient  可选
@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.
如果一个属性非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic
示例:
  //根据birth计算出age属性
  @Transient
 public int getAge() {
     return getYear(new Date()) - getYear(birth);
}

 

7、@ManyToOne(fetch=FetchType,cascade=CascadeType)   可选
@ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键
optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true
fetch:表示抓取策略,默认为FetchType.EAGER
cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作
targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断

8、@JoinColumn可选
@JoinColumn和@Column类似,介量描述的不是一个简单字段,而一一个关联字段,例如.描述一个@ManyToOne的字段.
name:该字段的名称.由于@JoinColumn描述的是一个关联字段,如ManyToOne,则默认的名称由其关联的实体决定.
例如,实体Order有一个user属性来关联实体User,则Order的user属性为一个外键,
其默认的名称为实体User的名称+下划线+实体User的主键名称
示例:
 

示例:
 //订单Order和用户User是一个ManyToOne的关系
 //在Order类中定义
@ManyToOne()
@JoinColumn(name="userId")
 public User getUser() {
      return user;
    }

 

 

 

9、@OneToMany(fetch=FetchType,cascade=CascadeType)  可选

@OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段.

fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存

cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新或删除

例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除

示例:

    @OneTyMany(cascade=ALL)

    public List getOrders() {

       return orders;

    }

 

10、@ManyToMany   可选
@ManyToMany 描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理

targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class

mappedBy:表示多对多关联的另一个实体类的对应集合属性名称

示例:

    User实体表示用户,Book实体表示书籍,为了描述用户收藏的书籍,可以在User和Book之间建立ManyToMany关联

    @Entity

    public class User {

       private List books;

       @ManyToMany(targetEntity=package.Book.class)

       public List getBooks() {

           return books;

       }

       public void setBooks(List books) {

           this.books=books;

       }

    }

    

    @Entity

    public class Book {

       private List users;

       @ManyToMany(targetEntity=package.Users.class, mappedBy="books")

       public List getUsers() {

           return users;

       }

       public void setUsers(List users) {

           this.users=users;

       }

    }

两个实体间相互关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性,

需要注意的是,有且只有一个实体的@ManyToMany注解需要指定mappedBy属性,指向targetEntity的集合属性名称

利用ORM工具自动生成的表除了User和Book表外,还自动生成了一个User_Book表,用于实现多对多关联

 

11、@MappedSuperclass 可选
@MappedSuperclass可以将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解

示例:

    @MappedSuperclass

    public class Employee() {

       ....

    }

    

    @Entity

    public class Engineer extends Employee {

       .....

    }

    @Entity

    public class Manager extends Employee {

       .....

    }

 

12、@Embedded   可选
@Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.

例如User包括id,name,city,street,zip属性.

我们希望city,street,zip属性映射为Address对象.这样,User对象将具有id,name和address这三个属性.

Address对象必须定义为@Embededable 

示例:

    @Embeddable

    public class Address {city,street,zip}

    @Entity

    public class User {

       @Embedded

       public Address getAddress() {

           ..........

       }

    }

 

 

分享到:
评论

相关推荐

    详述 Spring Data JPA 的那些事.docx

    "Spring Data JPA知识点详解" ...小结 Spring Data JPA是一种基于JPA的数据访问技术,它提供了一种简洁的方式来访问关系数据库。使用Spring Data JPA可以简化数据库操作,提高开发效率和可读性。

    JPA学习笔记-EJB-03JPA主键生成策略总结

    #### 三、小结 以上介绍的是JPA中单字段主键生成的基本策略。每种策略都有其适用场景和优缺点。开发者应根据具体的应用需求和数据库特性选择最适合的生成方式。例如,在性能要求较高的场景下可以选择`IDENTITY`或`...

    spring data jpa 连接mysql8.x的一些问题梳理总结.docx

    小结 在使用 Spring Data JPA 连接 MySQL 8.x 时,需要注意环境变量的配置、数据库连接信息的配置、时区的配置、useSSL 的配置、JDBC 版本的配置等。同时,需要正确地配置方言设置,以避免出现问题。

    springboot+dubbo+zookeeper+JPA步骤

    #### 四、小结 通过以上步骤,我们可以构建一个基于 Spring Boot、Dubbo、ZooKeeper 和 JPA 的微服务架构。这种架构不仅具备良好的可扩展性,而且能够很好地应对分布式系统的复杂度。在实际开发中,我们还需要结合...

    Spring-data-jpa 学习笔记.docx

    #### 六、本文小结 Spring Data JPA 大大简化了 JPA 的使用方式,使得开发者能够更高效地进行数据访问层的开发。通过遵循约定优于配置的原则,减少了大量模板代码的编写,提高了开发效率。 #### 第二篇 在第二篇...

    hibernate注解学习笔记

    #### 四、小结 本篇笔记总结了Hibernate中常用的注解配置方式,包括实体类的基本配置、属性映射配置、复合类型配置以及主键生成策略等。通过这些注解,我们可以方便地将Java对象映射到关系型数据库中,简化了持久化...

    Spring 注解

    #### 小结 Spring 2.5及后续版本引入的基于注解的配置方式极大地提高了开发效率,减少了冗余的配置工作。通过本文的介绍,读者应该能够了解Spring中各种注解的基本用法以及如何使用这些注解来简化应用程序的配置。...

    SpringBoot整合JPA的实例代码

    八、小结 本篇文章主要介绍了SpringBoot整合JPA的实例代码,使用Hibernate作为JPA Provider,实现了数据持久化和查询等功能。通过本篇文章,可以了解如何使用JPA在SpringBoot项目中实现数据持久化。

    EJB3.0注释小结

    13. **JPA生命周期回调注解**:如`@PostLoad`、`@PrePersist`、`@PostPersist`、`@PreUpdate`、`@PostUpdate`、`@PreRemove`和`@PostRemove`,这些注解提供了在特定实体生命周期事件发生时执行自定义逻辑的机会。...

    Hibernate实战(第2版 中文高清版)

     1.5 小结   第2章 启动项目   2.1 启动Hibernate项目   2.1.1 选择开发过程   2.1.2 建立项目   2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2 启动Java Persistence项目   2.2.1 ...

    Struts2 in action中文版

    第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 ...15.7 小结 332

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.5小结 ...2.6小结 ...3.7小结 ...4.6小结 ...5.5.1使用jpa模板 ...5.5.3建立使用jpa的dao ...5.7.3注解驱动的缓存 ...b.4小结

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

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

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

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

    Spring攻略(第二版 中文高清版).part2

    1.15 小结 56 第2章 高级Spring IoC容器 57 2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决方案 57 2.1.3 工作原理 57 2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 ...

    Spring攻略(第二版 中文高清版).part1

    1.15 小结 56 第2章 高级Spring IoC容器 57 2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决方案 57 2.1.3 工作原理 57 2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 ...

    SSM集成应用

    **12.5 SpringMVC小结** - **优势**:清晰的架构、易于理解和使用。 - **自由度和扩展性**:通过各种配置和自定义实现高度的灵活性。 #### 补充 **13.1 前台传method的方法名,后台通过反射调用方法** 通过动态...

    hibernate annotation学习文档

    #### 五、小结 通过上述示例,我们了解了如何使用 Hibernate 注解来快速实现 Java 对象与数据库表之间的映射。这些注解大大简化了实体类的定义,同时也提供了足够的灵活性来处理复杂的业务需求。对于初学者而言,...

Global site tag (gtag.js) - Google Analytics