使用Hibernate处理集合元素

2023-09-24 10 0

使用Hibernate处理集合元素

在使用Hibernate的过程中,需要对一个集合类型的元素操作。Hibernate支持List/Set/Map元素,在Hibernate的mapper中有List/Set/Bag/Map标签以支持这一特性。

向一个学生对象中插入多张照片

- Stduent.java

package com.java1234.hibernate.model;import java.util.List;public class Student {private int id;private String name;private List<String> pictures;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<String> getPictures() {return pictures;}public void setPictures(List<String> pictures) {this.pictures = pictures;}}

- 使用List - 插入的元素有序且允许重复

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.java1234.hibernate.model.Student" table="tb_student"><id name="id" column="stuId"><generator class="native"/></id><property name="name" column="stuName"/><list name="pictures" table="tb_picture"><key column="stuId"/><list-index column="picIndex"/><element column="picName" type="string"/></list></class></hibernate-mapping>

生成的数据库表结构

Hibernate: create table tb_picture (stuId integer not null, picName varchar(255), picIndex integer not null, primary key (stuId, picIndex))
Hibernate: create table tb_student (stuId integer not null auto_increment, stuName varchar(255), primary key (stuId))
Hibernate: alter table tb_picture add constraint FK_dpi255h9ltoc1glix2hq8r2og foreign key (stuId) references tb_student (stuId)

使用Set  - 元素不可重复且无序

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.java1234.hibernate.model.Student" table="tb_student"><id name="id" column="stuId"><generator class="native"/></id><property name="name" column="stuName"/><set name="pictures" table="tb_picture"><key column="stuId"/><element column="picName" type="string"/></set></class></hibernate-mapping>

生成的数据库表结构

Hibernate: create table tb_picture (stuId integer not null, picName varchar(255))
Hibernate: create table tb_student (stuId integer not null auto_increment, stuName varchar(255), primary key (stuId))
Hibernate: alter table tb_picture add constraint FK_dpi255h9ltoc1glix2hq8r2og foreign key (stuId) references tb_student (stuId)

使用Bag - 元素无序/可以重复

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.java1234.hibernate.model.Student" table="tb_student"><id name="id" column="stuId"><generator class="native"/></id><property name="name" column="stuName"/><idbag name="pictures" table="tb_picture"><collection-id type="integer" column="picId"><generator class="increment"/></collection-id><key column="stuId"/><element column="picName" type="string"/></idbag></class></hibernate-mapping>

生成的数据库表结构

Hibernate: create table tb_picture (stuId integer not null, picName varchar(255), picId integer not null, primary key (picId))
Hibernate: create table tb_student (stuId integer not null auto_increment, stuName varchar(255), primary key (stuId))
Hibernate: alter table tb_picture add constraint FK_dpi255h9ltoc1glix2hq8r2og foreign key (stuId) references tb_student (stuId)

使用Map

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.java1234.hibernate.model.Student" table="tb_student"><id name="id" column="stuId"><generator class="native"/></id><property name="name" column="stuName"/><map name="pictures" table="tb_picture"><key column="stuId"/><map-key column="picKey" type="string"/><element column="picName" type="string"/></map></class></hibernate-mapping>

生成的数据库表结构

Hibernate: create table tb_picture (stuId integer not null, picName varchar(255), picKey varchar(255) not null, primary key (stuId, picKey))
Hibernate: create table tb_student (stuId integer not null auto_increment, stuName varchar(255), primary key (stuId))
Hibernate: alter table tb_picture add constraint FK_dpi255h9ltoc1glix2hq8r2og foreign key (stuId) references tb_student (stuId)

代码编程
赞赏

相关文章

LeetCode之Isomorphic Strings
LeetCode之Combination Sum III
LeetCode之Find Minimum in Rotated Sorted Array II
LeetCode之Majority Element II
LeetCode之Product of Array Except Self
LeetCodeConvert Sorted List to Binary Search Tree