博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Hibernate] - many to many
阅读量:5818 次
发布时间:2019-06-18

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

Hibernate的多对多实现:

 

hibernate.cfg.xml

com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1/testdb
root
1
org.hibernate.dialect.MySQL5Dialect
thread
org.hibernate.cache.internal.NoCacheProvider
true
update

 

mapping配置:

Bank.hbm.xml

User.hbm.xml

 

POJO

package com.my.bean;import java.util.Set;public class Bank {    private long bankID;    private String bankName;    private Set
users; public long getBankID() { return bankID; } public void setBankID(long bankID) { this.bankID = bankID; } public String getBankName() { return bankName; } public void setBankName(String bankName) { this.bankName = bankName; } public Set
getUsers() { return users; } public void setUsers(Set
users) { this.users = users; }}
package com.my.bean;import java.util.Set;public class User {    private long userID;    private String userName;    private Set
banks; public long getUserID() { return userID; } public void setUserID(long userID) { this.userID = userID; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Set
getBanks() { return banks; } public void setBanks(Set
banks) { this.banks = banks; }}

测试:

package com.my.init;import java.util.HashSet;import org.hibernate.Session;import org.hibernate.Transaction;import com.my.bean.Bank;import com.my.bean.User;import com.my.dao.util.HibernateUtil;public class Test {    public static void main(String[] args) {        Session session = HibernateUtil.getSessionFactory().openSession();        Transaction tx = session.beginTransaction();                try {            // create user            User userRobin = new User();            userRobin.setUserName("Robin");            userRobin.setBanks(new HashSet
()); User userBen = new User(); userBen.setUserName("Ben"); userBen.setBanks(new HashSet
()); // create bank Bank bankCBC = new Bank(); bankCBC.setBankName("CBC"); bankCBC.setUsers(new HashSet
()); Bank bankBBC = new Bank(); bankBBC.setBankName("BBC"); bankBBC.setUsers(new HashSet
()); // add relationship userRobin.getBanks().add(bankCBC); userRobin.getBanks().add(bankBBC); userBen.getBanks().add(bankCBC); userBen.getBanks().add(bankBBC); session.save(userRobin); session.save(userBen); session.save(bankCBC); session.save(bankBBC); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } session.close(); }}

 


 

上面测试例子会自动生成一张表:card,这张是bank和user表的映射表。里头是bank_id和user_id两个组合字段。

如果想在这张映射表中加入额外的字段,那么hibernate似乎无法做到。因为这需要把多对多写成两个一对多的关系。事实上这样加额外字段到映射表,好像也是违反了DBMS的设计原则。

转载地址:http://fkwdx.baihongyu.com/

你可能感兴趣的文章
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
vSphere 6将于2月2日全球同步发表
查看>>
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>
【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档
查看>>