博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate之关系映射上
阅读量:5033 次
发布时间:2019-06-12

本文共 3677 字,大约阅读时间需要 12 分钟。

分别创建user,farm,user_general三张表

create table user( uuid bigint not null auto_increment, name varchar(100), age int not null, province varchar(100), city varchar(100), street varchar(100), constraint pk_user primary key(uuid))charset=utf8 ENGINE=InnoDB;create table user_general(uuid bigint not null,realname varchar(10),gender varchar(10),birthday int,height int,weight int, constraint pk_user_general primary key(uuid), constraint fk_user_general foreign key(uuid) references user(uuid))charset=utf8 ENGINE=InnoDB;create table farm(uuid bigint not null auto_increment,user_id bigint,name varchar(10),constraint pk_farm primary key(uuid),constraint fk_farm foreign key(user_id) references user(uuid))charset=utf8 ENGINE=InnoDB;
View Code

单向关联:

1.多对一映射(many to one):

该标签在持久化类中属于多的一方配置;例如本例中farm即为多的一方。

 重点是这段配置:

 <many-to-one name="user" class="org.hibernate.tutorials.domain.User" column="user_id" cascade="save-update"/>

 其中column对应表中的外键(另一张表的主键),cascade设置为save-update后即可实现向数据库中级联修改

 farm.hbm.xml配置:

1 
2
3
4
5
6
7
8
9
View Code

Farm对应的实体类: 

public class Farm implements Serializable{        private int uuid;        private String name;        private User user;//农场所属用户    /**     * @return the uuid     */    public int getUuid() {        return uuid;    }    /**     * @param uuid the uuid to set     */    public void setUuid(int uuid) {        this.uuid = uuid;    }    /**     * @return the name     */    public String getName() {        return name;    }    /**     * @param name the name to set     */    public void setName(String name) {        this.name = name;    }    /**     * @return the user     */    public User getUser() {        return user;    }    /**     * @param user the user to set     */    public void setUser(User user) {        this.user = user;    }    /* (non-Javadoc)     * @see java.lang.Object#toString()     */    @Override    public String toString() {        return "Farm [uuid=" + uuid + ", name=" + name + "]";    }
View Code

测试代码:   

1     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 2          3         User user = new User(); 4         user.setName("lucy"); 5          6         Farm farm=new Farm(); 7         farm.setName("test3"); 8         farm.setUser(user); 9         10         Farm farm1=new Farm();11         farm1.setName("test4");12         farm1.setUser(user);13         14         session.beginTransaction();15         session.save(farm);16         session.save(farm1);17         session.getTransaction().commit();
View Code

2.一对一映射(分为2种情况:唯一外键和主键关联)

2.1:唯一外键:用的标签仍为many-to-one 区别是需要加unique="true"属性表示唯一映射,具体案例

2.2主键关联映射:(一个字段同时是主键和外键(user和user_general))

 <one-to-one name="user" class="org.hibernate.tutorials.domain.User" constrained="true"/>  constrained="true"指明该类(UserGeneral)和关联的类(User)对应的表,通过外键引用对主键约束

UserGeneral.hbm.xml 配置 

1 
2
3
4
5
user 6
7
8
9
10
11
View Code

  测试代码: 

1     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 2          3         User user = new User(); 4         user.setName("rrrrr"); 5          6         UserGeneral ge=new UserGeneral(); 7         ge.setUser(user); 8         ge.setRealname("cccccc"); 9         10         session.beginTransaction();11         session.save(ge);12         session.getTransaction().commit();
View Code

 

 

参考:,

       

转载于:https://www.cnblogs.com/Non-Tecnology/p/4750799.html

你可能感兴趣的文章
[CF508E] Arthur and Brackets
查看>>
[CF1029E] Tree with Small Distances
查看>>
tp5.0中及其常用方法的一些函数方法(自己看)和技巧(不断添加中)
查看>>
美团推荐算法实践
查看>>
Netty官方示例
查看>>
[数分提高]2014-2015-2第4教学周第2次课
查看>>
ansible进阶小技巧--tags
查看>>
JSP页面跳转方式
查看>>
发布高性能迷你React框架anu
查看>>
Python中Gradient Boosting Machine(GBM)调参方法详解
查看>>
利用DDE通信将PLC数据传输到EXCEL
查看>>
Eclipse 实用快捷键大全
查看>>
与非门和或门实现异或门
查看>>
golang统计出其中英文字母、空格、数字和其它字符的个数
查看>>
poj 1782 Run Length Encoding
查看>>
《自我介绍》
查看>>
在线考试系统设计思路
查看>>
p1150[noip2013普及]表达式求值
查看>>
POST和GET有什么区别?
查看>>
js基础
查看>>