转载请注明出处:

  在JPA中,@ElementCollection注解主要用于映射集合属性,例如List、Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射。这个注解可以用于实体类的字段,表示该字段是一个元素集合,每个元素都会被映射到数据库中的一行。

  例如,假设我们有一个User实体类,每个用户可以有多个电话号码,我们可以使用@ElementCollection注解来映射这个一对多的关系:

@Entity
public class User {
@Id
@GeneratedValue
private Long id; private String name; @ElementCollection
private List<String> phoneNumbers;
}

  在这个例子中,phoneNumbers字段是一个List<String>,每个电话号码都会被映射到数据库中的一行。数据库中会有一个额外的表来存储这些电话号码,这个表的每一行都包含一个用户的ID和一个电话号码。

  @ElementCollection注解还可以和@CollectionTable注解一起使用,来指定映射集合属性的表的名称和结构。例如:

@Entity
public class User {
@Id
@GeneratedValue
private Long id; private String name; @ElementCollection
@CollectionTable(name = "user_phones", joinColumns = @JoinColumn(name = "user_id"))
private List<String> phoneNumbers;
}

  在这个例子中,@CollectionTable注解指定了映射集合属性的表的名称为user_phones,并且定义了一个名为user_id的外键列,这个外键列引用了User实体类的ID。

  需要注意的是,@ElementCollection注解只能用于映射基本类型和嵌入式类型,不能用于映射实体类。如果需要映射实体类,应该使用@OneToMany@ManyToMany注解。

  在数据库中,@ElementCollection注解对应的字段值会被保存在一个单独的表中,每个元素都会被映射到这个表的一行。这个表的每一行都包含一个外键列,这个外键列引用了主实体类的ID,以及一个或多个列来存储元素的值。

  例如,在上面的User实体类的例子中,phoneNumbers字段的值会被保存在user_phones表中,这个表的每一行都包含一个user_id列来引用User实体类的ID,以及一个phone_number列来存储电话号码的值。

  在JPA中,@ElementCollection注解对应的字段值在数据库中保存的方式是一条数据对应一行。例如,如果一个用户有多个电话号码,那么这些电话号码在user_phones表中会被保存为多条数据,每个电话号码对应一行。

  user_phones表的表结构通常包含以下字段:

  • 外键列:这个列用于引用主实体类的ID。在上面的User实体类的例子中,这个列的名称是user_id
  • 元素值列:这个列用于存储元素的值。在上面的User实体类的例子中,这个列的名称是phone_number

  以下是user_phones表的创建语句:

CREATE TABLE user_phones (
user_id BIGINT,
phone_number VARCHAR(255),
PRIMARY KEY (user_id, phone_number),
FOREIGN KEY (user_id) REFERENCES User(id)
);

  在这个创建语句中,user_id列是一个外键列,它引用了User实体类的ID。phone_number列是一个元素值列,它用于存储电话号码的值。user_idphone_number列一起构成了主键,这意味着每个用户的每个电话号码都会被存储为一个唯一的行。

JPA中@ElementCollection使用的更多相关文章

  1. JPA学习---第九节:JPA中的一对多双向关联与级联操作

    一.一对多双向关联与级联操作 1.创建项目,配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> < ...

  2. 4、JPA table主键生成策略(在JPA中table策略是首推!!!)

    用 table 来生成主键详解 它是在不影响性能情况下,通用性最强的 JPA 主键生成器.这种方法生成主键的策略可以适用于任何数据库,不必担心不同数据库不兼容造成的问题. initialValue不起 ...

  3. Hibernate JPA 中配置Ehcache二级缓存

    在Hibernate3 JPA里配置了一下非分布式环境的二级缓存,效果不错.具体过程如下: 1, 需要引入的jar包 http://ehcache.org/downloads/catalog 下载的包 ...

  4. 使用JPA中@Query 注解实现update 操作

    spring使用jpa进行update操作主要有两种方式: 1.调用保存实体的方法 1)保存一个实体:repository.save(T entity) 2)保存多个实体:repository.sav ...

  5. Jpa中设置OneToMany插入报异常解决办法

    在Jpa中如果设置@OneToMany,但使用的时候,如果没有赋值,会报异常出现,这时只需要实例化一个空数组即可, 但类型一定要对应: 实例如下: newField.setxxxxxList(new ...

  6. JPA中EntityListeners注解的使用

    使用场景 EntityListeners在jpa中使用,如果你是mybatis是不可以用的 它的意义 对实体属性变化的跟踪,它提供了保存前,保存后,更新前,更新后,删除前,删除后等状态,就像是拦截器一 ...

  7. Spring data JPA中使用Specifications动态构建查询

    有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类 ...

  8. JPA中建立数据库表和实体间映射小结

    在JPA中,映射数据库表和实体的时候,需要注意一些细节如下, 实体类要用@Entity的注解: 要用 @Id 来注解一个主键: 如果跟数据库相关联,要用@Table注解相关数据库表: 实体类中字段需要 ...

  9. JPA中自动使用@Table(name = "userTab")后自动将表名、列名添加了下划线的问题

    一.问题 JPA中自动使用@Table(name = "userTab")后自动将表名.列名添加了下划线的问题,如下图: 二.解决 在application.properties文 ...

  10. Spring Data JPA中的动态查询 时间日期

    功能:Spring Data JPA中的动态查询 实现日期查询 页面对应的dto类private String modifiedDate; //实体类 @LastModifiedDate protec ...

随机推荐

  1. HBase Compaction 原理与线上调优实践

    作者:vivo 互联网存储技术团队- Hang Zhengbo 本文对 HBase Compaction 的原理.流程以及限流的策略进行了详细的介绍,列举了几个线上进行调优的案例,最后对 Compac ...

  2. 浏览器工作原理及V8引擎

    浏览器解析过程 当浏览器加载html资源时,会进行如下的解析过程 遇见 HTML 标记,构建 DOM 树 遇见 style/link 标记调用相应解析器处理CSS标记,并构建出CSS样式树 遇见 sc ...

  3. [kafka]常见术语

    前言 kafka属于分布式的消息引擎系统,主要功能是提供一套完备的消息发布与订阅解决方案. 消息和批次 kafka 的数据单元被称为消息.消息由字节数组组成,对kafka来说,消息里的数据没有特殊的格 ...

  4. 用python用户注册和短信验证码逻辑实现案例

    一.写代码前分析(逻辑分析OK了才可以顺利成章的敲代码): A.用户发送请求 1.注册账号(用户名不能重复)--按照需求进行判断 2.短信验证码(有效期5分钟)--对短信验证码进行保存 B.用户注册. ...

  5. JS逆向实战21——某查查webpack密码加密

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 网站 aHR0cHM6Ly ...

  6. TCP 粘包

    TCP(Transmission Control Protocol,传输控制协议)是一种传输层协议. TCP提供了以下主要功能: 可靠性:TCP使用确认.重传和校验等机制来确保数据的可靠传输.它能够检 ...

  7. jQuery Ajax执行顺序问题

    代码如下: $(document).ready(function () { var res; $.ajax({ type: 'post', url: 'GridDemo.aspx/PlaceOrder ...

  8. SICTF-2023 #Round2-WP-Crypto | Misc

    Crypto 一.[签到]古典大杂烩 附件信息: 很明显可以看出来是base100,密码工具箱一把梭: SICTF{fe853b49-8730-462e-86f5-fc8e9789f077} 二.Ra ...

  9. HiAI Foundation助力端侧音视频AI能力,高性能低功耗释放云侧成本

    过去三年是端侧AI高速发展的几年,华为在2020年预言了端侧AI的发展潮流,2021年通过提供端云协同的方式使我们的HiAI Foundation应用性更进一个台阶,2022年提供视频超分端到端的解决 ...

  10. Python脚本批量造数据、跑定时任务协助测试

    批量造数据 连接Mysql的信息 1 import pymysql 2 # 数据库连接信息 3 # 多个库要有多个conn 4 conn = pymysql.connect( 5 host=" ...