SpringDataJPA在Entity中常用的注解介绍

以下是关于Spring Data JPA的常用注解的详细介绍及示例说明。

@Entity

@Entity 是一个用于将 Java 类映射到数据库表的注解。该注解必须在实体类上声明,用于指示该类是实体的类,需要创建一个数据库表来映射该实体类。例如:

@Entity
@Table(name = "users")
public class User {
    // 实体类的属性和方法...
}

在上面的示例中,@Table指示数据库表的名称为“users”,则必须在数据库中保证该表存在,否则,JPA在查询和操作数据时将会抛出异常。

@Id

@Id 是用于设置实体类的主键标识符的注解。该注解必须标注在实体类的属性上,并通常用于与主键列进行映射。例如:

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue
    private Long id;
    // 实体类的其他属性和方法...
}

在上面的示例中,@GeneratedValue用于指示系统自动分配标识符的值。@Id@GeneratedValue一同使用,将Java类属性映射为数据库主键列。该策略适用于被称为自动递增的数据库主键列。

@Column

@Column 是用于指示实体属性应该映射到数据库表中的列的注解。该注解必须在实体类的属性上指定,用于与数据库表的列进行联接映射。例如:

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "name")
    private String username;

    @Column(nullable = false)
    private Integer age;

    // 实体类的其他属性和方法...
}

在上面的示例中,@Column指定了数据库表中nameage属性的映射关系:

  • name属性映射为数据库表name列;
  • age属性映射为数据库表age列,并将nullable参数设置为false,表示该列不允许为null值。

@OneToMany 和 @ManyToOne

@OneToMany@ManyToOne 是用于建立实体之间关系映射的注解。

@OneToMany

@OneToMany 注解用于建立一对多关系。通常位于多的一方,即拥有外键的实体类上。例如:

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "user")
    private List<Order> orders;

    // 实体类的其他属性和方法...
}

@Entity
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;

    // 实体类的其他属性和方法...
}

在上面的示例中,@OneToMany注解指示了用户实体可以有多个订单。mappedBy属性指定了关系的维护方,即orders属性在order类中代表了用户的一方。

@ManyToOne

@ManyToOne则用于建立多对一关系。通常位于多的一方的实体类属性上。例如:

@Entity
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;

    // 实体类的其他属性和方法...
}

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "user")
    private List<Order> orders;

    // 实体类的其他属性和方法...
}

在上面的示例中,@ManyToOne注解指示了订单实体属于一个用户。@JoinColumn注解用于指定外键列的名称和引用实体类的列的名称。

示例说明

示例1:使用@Entity和@Id注解

首先创建一个实体类 Product,其中包含 idname 两个属性:

@Entity
@Table(name = "products")
public class Product {
    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "name")
    private String name;

    // 省略其他属性和方法...
}

该实体类使用 @Entity@Table 注解指定与数据库表的映射。@Id@GeneratedValue 注解将 id 属性映射到数据库表中的主键列,表示其值由系统自动生成。

示例2:使用@ManyToOne和@OneToMany注解

接下来创建一个包含订单详细信息的实体类 OrderDetail,其中包含 idquantitypriceorderId四个属性,用于表示某个订单中某个商品的数量、单价和总价等信息。@ManyToOne注解用于将订单详细信息与订单关联,@JoinColumn注解则用于指示外键列的名称和引用订单的列的名称:

@Entity
@Table(name = "order_details")
public class OrderDetail {
    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private Integer quantity;

    @Column(nullable = false)
    private Double price;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "order_id", referencedColumnName = "id")
    private Order order;

    // 省略其他属性和方法...
}

接下来创建一个订单的实体类 Order,其中包含 idorderNumberorderDetails 三个属性。该实体类使用 @OneToMany注解将订单及其详细信息关联,并指定了关系的维护方是 orderDetails

@Entity
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "order_number")
    private String orderNumber;

    @OneToMany(mappedBy = "order")
    private List<OrderDetail> orderDetails;

    // 省略其他属性和方法...
}

在上述示例中,@OneToMany 注解指示了订单实体具有多个订单详细信息。 mappedBy属性指定了关系的维护方,即 orderDetails 属性在 OrderDetail 类中代表了订单的一方。

注意: 示例2是双向关联,所以需要在每个实体类上添加对方的属性,所以 Order 类中有一个名为orderDetailsList 属性用于表示订单所包含的详细信息,而 OrderDetail 类中则有一个 order 属性用于表示该详细信息所对应的订单。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringDataJPA在Entity中常用的注解介绍 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月3日

相关文章

  • Spring Boot + Canal 实现数据库实时监控

    下面是“Spring Boot + Canal 实现数据库实时监控”的完整攻略。 1. 简介 Canal 是阿里巴巴开源的一款用于数据库增量日志解析的工具,它基于 MySQL 构建,实现了 MySQL 数据库增量日志的实时采集,并提供了增量日志解析的功能,目前 Canal 的客户端支持 Spring Boot。 本文将介绍如何使用 Spring Boot 和…

    Java 2023年5月20日
    00
  • Windows系统中Java调用cmd命令及执行exe程序的方法

    下面我将为您详细讲解“Windows系统中Java调用cmd命令及执行exe程序的方法”的完整攻略。 1.调用cmd命令 要在Java程序中调用cmd命令,可以使用Java中的Runtime.getRuntime()方法执行系统命令。具体代码如下: Process process = Runtime.getRuntime().exec("cmd /…

    Java 2023年5月23日
    00
  • IDEA 使用mybatis插件Free Mybatis plugin的步骤(推荐)

    下面是详细讲解使用“Free Mybatis plugin”插件的步骤。 1. 安装插件 首先,在IDEA的插件市场中搜索并安装“Free Mybatis plugin”插件。在IDEA中依次打开“File”>“Settings”>“Plugins”,然后在搜索栏中输入“Free Mybatis plugin”,点击“Install”按钮进行安装…

    Java 2023年5月20日
    00
  • 常见的Java ORM框架有哪些?

    Java ORM(Object-Relational Mapping)框架是用于简化Java应用程序与关系数据库之间的数据映射、数据管理和数据操作的工具,常见的Java ORM框架有以下几种: Hibernate:Hibernate是一个广泛应用的Java ORM框架,支持JPA(Java Persistence API)规范,其主要优点是开发效率高、功能强…

    Java 2023年5月11日
    00
  • Java线程池的分析和使用详解

    Java线程池的分析和使用详解 线程池的概念 线程池(thread pool)是线程管理的一种机制,它能够让我们更加方便地管理大量的线程,避免了频繁地创建和销毁线程,提高了程序的效率。Java中通过java.util.concurrent包提供了线程池的实现。 线程池的特点 控制线程数量 重复利用线程 管理线程 线程池的类型 Java中的线程池主要有以下4种…

    Java 2023年5月19日
    00
  • java在原字符中插入新字符或字符串实例

    要在Java中在原字符/字符串中插入新字符或字符串实例,您可以使用StringBuffer或StringBuilder类中的insert()方法。 这两个类都用于对字符串进行操作,而StringBuffer类是线程安全的,因此建议在多线程环境下使用(如果不考虑线程安全问题,建议使用StringBuilder类)。 下面是完整的攻略: 创建一个StringBu…

    Java 2023年5月26日
    00
  • 如何使用Reactor完成类似Flink的操作

    使用Reactor完成类似Flink的操作可以分为以下几个步骤: 创建Flux或Mono:首先需要创建Flux或Mono,Flux表示可以产生多个数据流,Mono表示只能产生一个数据流; 转换Flux或Mono:可以使用map()、flatMap()、filter()等函数对Flux或Mono进行转换,获得想要的结果; 订阅Flux或Mono:最后需要订阅F…

    Java 2023年5月20日
    00
  • Perl使用Tesseract-OCR实现验证码识别教程

    下面我将为您详细讲解如何使用Perl语言配合Tesseract-OCR开源库实现验证码识别。整个过程共分为以下几个步骤: 安装Tesseract-OCR 安装Perl模块 获取验证码图片 预处理图片 使用Tesseract-OCR进行识别 整合以上步骤 接下来,我们将一步一步来看每个步骤的详细说明。 安装Tesseract-OCR Tesseract-OCR…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部