📌  相关文章
📜  使用注释教程示例的每个子类的Hibernate Table(1)

📅  最后修改于: 2023-12-03 15:36:40.387000             🧑  作者: Mango

使用注释教程示例的每个子类的Hibernate Table

本教程主要介绍如何使用注释的方式来定义Hibernate的数据表。Hibernate是一种ORM框架,可以将Java的对象映射到数据库的表中,而使用注释可以方便地指定表的结构。

@Entity注释

在Hibernate中,每个数据表都对应一个Java类。这个类需要使用@Entity注释来声明该类是一个实体类。

@Entity
public class User {
    ...
}
@Table注释

注释@Table用于指定表的名称和元数据。

@Entity
@Table(name = "users", uniqueConstraints = {
        @UniqueConstraint(columnNames = "username")
})
public class User {
    ...
}

在上面的代码中,我们指定了表的名称为users,并且添加了一个uniqueConstraints元数据,该元数据指定表的username列是唯一的。

@Column注释

注释@Column用于指定列的名称和元数据。

@Column(name = "user_name", nullable = false, length = 64)
private String userName;

在上面的代码中,我们指定了列的名称为user_name,并且添加了一个nullable元数据,该元数据指定该列不允许为空。

@Id注释

注释@Id用于声明一个属性作为主键。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long userId;

在上面的代码中,我们将userId属性作为主键,并且指定了它的生成策略为GenerationType.AUTO

@GeneratedValue注释

注释@GeneratedValue用于指定主键的生成策略。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long userId;

在上面的代码中,我们将主键的生成策略指定为GenerationType.AUTO,表示使用自动生成的方式来生成主键。

@OneToMany注释

注释@OneToMany用于声明一个一对多关系。

@Entity
@Table(name = "users")
public class User {
 
    @OneToMany(mappedBy = "user")
    private Set<Address> addresses;
 
    ...
}
 
@Entity
@Table(name = "addresses")
public class Address {
 
    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User user;
 
    ...
}

在上面的代码中,我们声明了一个用户可以拥有多个地址的关系,使用mappedBy属性将addresses属性映射到Address类的user属性上。

@ManyToOne注释

注释@ManyToOne用于声明一个多对一关系。

@Entity
@Table(name = "users")
public class User {
 
    ...
 
    @ManyToOne
    @JoinColumn(name = "company_id", nullable = false)
    private Company company;
 
    ...
}
 
@Entity
@Table(name = "companies")
public class Company {
 
    @OneToMany(mappedBy = "company")
    private Set<User> users;
 
    ...
}

在上面的代码中,我们声明了一个公司可以拥有多个用户的关系,使用JoinColumn属性将User类的company属性映射到companies表中的company_id列上。

注释的这些示例只是Hibernate提供的一小部分功能,你可以根据自己的需求进行扩展和使用。