java jpa set_JPA 集合(Set)映射

集合(Set)是一个包含唯一元素的接口。 这些元素不保留任何顺序。当需要以无序方式检索唯一元素时,可以使用Set。

完整的项目目录结构如下所示 -

959096668e86ea3cc253a3a0354d63db.png

集合映射实例

在这个例子中,我们将一个对象嵌入到一个实体类中,并将其定义为一个集合类型 - Set。

private Set

address=new HashSet
();

这个例子包含以下步骤 -

第1步: 在com.yiibai.jpa包下创建一个实体类Employee.java,这个类包含员工id,name 和嵌入对象(员工地址)。注解

文件:Employee.java 的代码如下所示 -

package com.yiibai.jpa;

import java.util.*;

import javax.persistence.*;

import java.util.*;

import javax.persistence.*;

@Entity

public class Employee {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private int e_id;

private String e_name;

@ElementCollection

private Set

address = new HashSet
();

public int getE_id() {

return e_id;

}

public void setE_id(int e_id) {

this.e_id = e_id;

}

public String getE_name() {

return e_name;

}

public void setE_name(String e_name) {

this.e_name = e_name;

}

public Set

getAddress() {

return address;

}

public void setAddress(Set

address) {

this.address = address;

}

}

第2步: 在com.yiibai.jpa包下创建一个嵌入对象Address.java类。 注解

文件:Address.java 的代码如下所示 -

package com.yiibai.jpa;

import javax.persistence.*;

@Embeddable

public class Address {

private int e_pincode;

private String e_city;

private String e_state;

public int getE_pincode() {

return e_pincode;

}

public void setE_pincode(int e_pincode) {

this.e_pincode = e_pincode;

}

public String getE_city() {

return e_city;

}

public void setE_city(String e_city) {

this.e_city = e_city;

}

public String getE_state() {

return e_state;

}

public void setE_state(String e_state) {

this.e_state = e_state;

}

}

第3步: 将实体类和其他数据库配置映射到persistence.xml文件中。

文件:persistence.xml 的代码如下所示 -

xmlns="http://xmlns.jcp.org/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

com.yiibai.jpa.Employee

com.yiibai.jpa.Address

value="com.mysql.jdbc.Driver" />

value="jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC" />

value="123456" />

value="create-or-extend-tables" />

在com.yiibai.collection包下创建一个持久化类SetMapping.java,以便将实体对象与数据保持一致。

文件:SetMapping.java 的代码如下所示 -

package com.yiibai.collection;

import javax.persistence.*;

import com.yiibai.jpa.*;

public class SetMapping {

public static void main(String[] args) {

EntityManagerFactory emf = Persistence.createEntityManagerFactory("Collection_Type");

EntityManager em = emf.createEntityManager();

em.getTransaction().begin();

Address a1 = new Address();

a1.setE_pincode(501000);

a1.setE_city("Guangzhou");

a1.setE_state("GuangDong");

Address a2 = new Address();

a2.setE_pincode(571100);

a2.setE_city("Haikou");

a2.setE_state("Hainan");

Address a3 = new Address();

a3.setE_pincode(533300);

a3.setE_city("Hangzhou");

a3.setE_state("Zhejiang");

Address a4 = new Address();

a4.setE_pincode(780000);

a4.setE_city("Nanjing");

a4.setE_state("Jiangsu");

Employee e1 = new Employee();

e1.setE_id(1000);

e1.setE_name("Maxsu");

Employee e2 = new Employee();

e2.setE_id(1002);

e2.setE_name("Marry");

Employee e3 = new Employee();

e3.setE_id(1003);

e3.setE_name("William");

Employee e4 = new Employee();

e4.setE_id(1004);

e4.setE_name("Curry");

e1.getAddress().add(a1);

e2.getAddress().add(a2);

e3.getAddress().add(a3);

e4.getAddress().add(a4);

em.persist(e1);

em.persist(e2);

em.persist(e3);

em.persist(e4);

em.getTransaction().commit();

em.close();

emf.close();

}

}

程序输出结果

程序执行完成后,下面的表格在MySQL工作台下生成。

Employee表 - 此表包含员工详细信息。要获取数据,请在MySQL中运行select * from employee查询。结果如下所示 - mysql> select * from employee;

+------+---------+

| E_ID | E_NAME |

+------+---------+

| 1003 | William |

| 1004 | Curry |

| 1000 | Maxsu |

| 1002 | Marry |

+------+---------+

4 rows in set

Employee_address表 - 此表表示员工和地址表之间的映射。 要获取数据,请在MySQL中运行select * from employee_address查询。结果如下所示 - mysql> select * from employee_address;

+-----------+-----------+-----------+---------------+

| E_CITY | E_PINCODE | E_STATE | Employee_E_ID |

+-----------+-----------+-----------+---------------+

| Hangzhou | 533300 | Zhejiang | 1003 |

| Nanjing | 780000 | Jiangsu | 1004 |

| Guangzhou | 501000 | GuangDong | 1000 |

| Haikou | 571100 | Hainan | 1002 |

+-----------+-----------+-----------+---------------+

4 rows in set

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值