前序
类似的问题在工作中反复碰到,在此做个笔记一劳永逸。
希望实现2张数据表,一张为标签表TB_LOCATIONTAG,一张为岗位表TB_LABELPOST,其中岗位表的id是标签表的LABELPOST_ID字段,即1个岗位可以有多个标签,岗位表和标签表是one-to-many的结构,标签和岗位就是many-to-one。
类似的表结构很多,比如员工和岗位关系,教师和学生关系等
表结构
标签表TB_LOCATIONTAG
ID | NAME | COMMENTS | INDEXNUMBER | LABELPOST_ID |
---|---|---|---|---|
A1000 | A1000 | 1号标签 | 0 | worker |
A1001 | A1001 | 2号标签 | 1 | worker |
A1002 | A1002 | 3号标签 | 2 | worker |
A1003 | A1003 | 4号标签 | 3 | worker |
A1004 | A1004 | 5号标签 | 4 | worker |
A1005 | A1005 | 6号标签 | 5 | worker |
A1006 | A1006 | 7号标签 | 6 | engineer |
A1007 | A1007 | 8号标签 | 7 | engineer |
A1008 | A1008 | 9号标签 | 8 | engineer |
A1009 | A1009 | 10号标签 | 9 | leader |
岗位表TB_LABELPOST
ID | NAME | COMMENTS | INDEXNUMBER |
---|---|---|---|
worker | worker | 工人 | 0 |
engineer | engineer | 工程师 | 1 |
leader | leader | 领导 | 2 |
Hibernate配置文件
标签LocationTag.hbm.xml
<?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.corsair.location.entity.LocationTag" catalog="paradb" table="tb_LocationTag"
dynamic-insert="true" dynamic-update="true">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name" type="java.lang.String"/>
<property name="comments" type="java.lang.String"/>
<property name="indexNumber" type="java.lang.Integer" not-null="true"/>
<many-to-one name="LabelPost" class="com.corsair.location.entity.LabelPost" fetch="select" lazy="false">
<column name="labelPost_id">
</column>
</many-to-one>
</class>
</hibernate-mapping>
岗位LabelPost.hbm.xml
<?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.corsair.location.entity.LabelPost" catalog="paradb" table="tb_LabelPost"
dynamic-insert="true" dynamic-update="true">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name" type="java.lang.String"/>
<property name="comments" type="java.lang.String"/>
<property name="indexNumber" type="java.lang.Integer"/>
<list name="LocationTagList" inverse="true">
<key>
<column name="labelPost_id">
</column>
</key>
<list-index column="indexNumber"/>
<one-to-many class="com.corsair.location.entity.LocationTag"/>
</list>
</class>
</hibernate-mapping>
entity文件
标签实体类LocationTag.java
package com.corsair.location.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
/**
* @author BecomeBamboo
* @Date 2020-09-22
* @desc 标签实体类
*/
public class LocationTag implements java.io.Serializable {
private String id;
private String name;
private String comments;
private Integer indexNumber;
private LabelPost labelPost;
public LocationTag() {
}
public LocationTag(String name, LabelPost labelPost) {
this.name = name;
this.labelPost = labelPost;
}
public LocationTag(String name, String comments) {
this.name = name;
this.comments = comments;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public Integer getIndexNumber() {
return indexNumber;
}
public void setIndexNumber(Integer indexNumber) {
this.indexNumber = indexNumber;
}
@JsonIgnore
public LabelPost getLabelPost() {
return labelPost;
}
public void setLabelPost(LabelPost labelPost) {
this.labelPost = labelPost;
}
}
岗位实体类LabelPost.java
package com.corsair.location.entity;
import com.google.common.collect.Lists;
import java.util.List;
/**
* @author BecomeBamboo
* @Date 2020-09-22
* @desc 岗位实体类
*/
public class LabelPost implements java.io.Serializable {
private String id;
private String name;
private String comments;
private Integer indexNumber;
private List<LocationTag> locationTagList = Lists.newArrayList();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public Integer getIndexNumber() {
return indexNumber;
}
public void setIndexNumber(Integer indexNumber) {
this.indexNumber = indexNumber;
}
public List<LocationTag> getLocationTagList() {
return locationTagList;
}
public void setLocationTagList(List<LocationTag> locationTagList) {
this.locationTagList = locationTagList;
}
}