文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-21 23:38

关注

这篇文章主要介绍了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中常用的注解有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯