JPA注解详解

一、@Entity

@Entity是所有JPA注解中最重要的一个,表示这个类是一个JPA实体类。

在一个使用JPA的项目中,所有的实体类都需要加上@Entity注解,这个注解告诉JPA实现这个类需要被持久化。

默认情况下,实体类的类名就是表名;如果需要修改表名,可以使用@Table注解指定表名。


@Entity
@Table(name = "user")
public class User {
    ……
}

二、@Id

@Id注解表示这个属性是主键。

如果主键是单一属性,可以把@Id标注在属性上。但是,如果主键是一个复合的属性,就需要单独创建一个主键类,并在实体类上使用@IdClass注解指向它。


@Entity
public class User {
    @Id
    private Long id;
    ……
}

@Entity
@IdClass(UserPK.class)
public class User {
    @Id
    private String name;
    @Id
    private int age;
    ……
}

public class UserPK implements Serializable {
    private String name;
    private int age;
    ……
}

三、@GeneratedValue

@GeneratedValue注解表示主键的生成策略。

JPA提供了多种生成策略,常用的有IDENTITY、TABLE和SEQUENCE。


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

四、@Column

@Column注解表示实体属性对应的表字段。

如果实体属性名称与表字段名称一致,@Column可以省略。


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

五、@Temporal

@Temporal注解表示日期类型的属性。

如果是DATE或TIME类型的属性,需要指定日期的精度;如果是TIMESTAMP类型的属性,可以省略。


@Column
@Temporal(TemporalType.DATE)
private Date birthdate;

@Column
@Temporal(TemporalType.TIME)
private Date birthtime;

@Column
@Temporal(TemporalType.TIMESTAMP)
private Date regtime;

六、@OneToMany/@ManyToOne

@OneToMany注解表示一对多的关系。

在关系的拥有方,需要使用@JoinColumn指定外键。

@ManyToOne注解与@OneToMany相对应,表示多对一的关系,同样需要使用@JoinColumn指定外键。


@Entity
public class Department {
    @Id
    private Long id;
    
    @OneToMany(mappedBy = "department")
    private List employees;
    ……
}

@Entity
public class Employee {
    @Id
    private Long id;
    
    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
    ……
}

七、@ManyToMany

@ManyToMany注解表示多对多的关系。

需要创建一个中间表来存储关系,也可以使用@JoinTable指定中间表的表名和字段名。


@Entity
public class Student {
    @ManyToMany
    @JoinTable(name = "student_course",
            joinColumns = @JoinColumn(name = "student_id"),
            inverseJoinColumns = @JoinColumn(name = "course_id"))
    private List courses;
    ……
}

@Entity
public class Course {
    @ManyToMany(mappedBy = "courses")
    private List students;
    ……
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/188497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-28 13:30
下一篇 2024-11-28 13:31

相关推荐

  • Hibernate注解联合主键 如何使用

    解答:Hibernate的注解方式可以用来定义联合主键,使用@Embeddable和@EmbeddedId注解。 一、@Embeddable和@EmbeddedId注解 在Hibe…

    编程 2025-04-29
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论