SpringDataJPA在Entity中常用的注解有哪些

发布时间:2021-12-06 12:20:05 作者:小新
来源:亿速云 阅读:189

这篇文章主要介绍了SpringDataJPA在Entity中常用的注解有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

首先我们常用的注解包括

@Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Transient、@Column、@Temporal、@Enumerated、@Lob

必须实现Serializable接口。

必须有默认的public无参数的构造方法。

必须覆盖equals和hashCode方法。equals方法用于判断两个对象是否相同,EntityManger通过find方法来查找Entity时是根据equals的返回值来判断的。hashCode方法返回当前对象的哈希码,生成的hashCode相同的概率越小越好,算法可以进行优化。

默认为AUTO即JPA自动选择合适的策略

IDENTITY 适用于MySQL,策略为自增

SEQUENCE 通过序列生成主键通过@SquenceGenerator指定序列名MySQL不支持

TABLE 框架由表模拟产生主键,使用该策略有利于数据库移植

@Column(name = "real_name", unique = true, nullable = false, insertable = false, updatable = false, columnDefinition = "varchar", length = 100)

name对应数据库的字段名,可选默认字段名和实体属性名一样

unique是否唯一,默认false,可选

nullable是否允许为空。可选,默认为true

insertable执行insert的时候是否包含此字段。可选,默认true

updatable执行update的时候是否包含此字段。可选,默认true

columnDefinition表示该字段在数据库中的实际类型

length数据库字段的长度,可选,默认25

@Temporal(TemporalType.DATE)    //映射为只有日期
@Temporal(TemporalType.TIME)    //映射为只有时间
@Temporal(TemporalType.TIMESTAMP)  //映射为日期+时间

Clob:字段类型为Character[]、char[]、String将被映射为Clob

Blob:字段类型为Byte[]、byte[]和实现了Serializable接口的类型将被映射为Blob类型

接下来介绍关联关系注解

@JoinColumn、@OneToOne、@OneToMany、@ManyToOne、@ManyToMany、@JoinTable、@OrderBy

1.@JoinColumn定义外键关联字段名称,其中属性意义如下

2.@OneToOne一对一关联关系

@OneToOne(targetEntity = SysRole.class, cascade = {CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.REFRESH,CascadeType.MERGE},fetch = FetchType.LAZY,optional = false,mappedBy = "userId",orphanRemoval = true)
@OneToOne
@JoinColumn(name = "role_id",referencedColumnName = "user_id")
private SysRole role;
//若需要双向关联则SysRole的内容如下
@OneToOne(mappedBy = "role")
private SysUser user;
//当然也可以不用选择mappedBy,使用下面效果也一样
@OneToOne
@JoinColumn(name = "user_id",referencedColumnName = "role_id")
private SysUser user;

3.@OneToMany和@ManyToOne一对多和多对一的关联关系

@Entity
@Table(name="user")
class User implements Serializable{
    private Long userId;
    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "user")
    private Set<Role> setRole;
}
@Entity
@Table(name="role")
class Role{
    private Long roleId;
    @ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id")//user_id字段作为外键
    private User user;
}

4.@OrderBy关联查询的时候排序,一般和@OneToMany一起使用

@Entity
@Table(name="user")
class User implements Serializable{
    private Long userId;
    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "user")
    @OrderBy("role_name DESC")
    private Set<Role> setRole;
}

5.@JoinTable关联关系表一般和@ManyToMany一起使用

@ManyToMany表示多对多,也有单双向之分,单双向和注解无关,只看实体类之间是否相互引用

@JoinTable(name = "sys_user_role",
  joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
        inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
@ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)
private List<SysRole> roles;

6.Left Join、Inner join和@EntityGraph

当使用@ManyToMany、@ManytoOne、@OneToMany、@OneToOne关联关系的时候SQL执行查询的时候总是一条主查询语句和N条子查询语句组成,运行的效率较地下,如果子对象有N个就会执行N+1条SQL,JPA2.1推出的@EntityGraph、@NamedEntityGraph用来提高查询效率@NamedEntityGraph配置在@Entity上面,而@EntityGraph配置在Repository的查询方法上面

@NamedEntityGraph(name = "User.addressEntityList",attributeNodes = {@NamedAttributeNode("setRole"),@NamedAttributeNode("dept")})
@Entity
@Table(name="user")
public class User implements Serializable{
    private Long userId;
    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "user")
    @OrderBy("role_name DESC")
    private Set<Role> setRole;
    @OneToOne
    @JoinColumn(name = "dept_id",referencedColumnName = "user_id")
    private Department dept;
}

然后只需要在Repository查询方法上面加上@EntityGraph注解即可,其中value就是@NamedEntityGraph中的Name,配置如下

@EntityGraph(value ="User.addressEntityList")
List<User> findAll();

对于关系查询需要注意以下事项:

感谢你能够认真阅读完这篇文章,希望小编分享的“SpringDataJPA在Entity中常用的注解有哪些”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

推荐阅读:
  1. SpringMVC常用注解有哪些
  2. SpringMVC常用的注解有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springdatajpa entity

上一篇:Python可变集合和不可变集合的构造方法有哪些

下一篇:Linux下如何解决查看IP地址不显示问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》