hibernate框架cascade和inverse的区别(十六)
2017-11-19 20:00
441 查看
1. cascade用来级联操作(保存、修改和删除)
2. inverse用来维护外键的
linkman表中有两条数据,并且有外键
看sql:
linkman里面没有外键了
看sql:
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate:
insert
into
cst_customer
(cust_name, cust_user_id, cust_create_id, cust_source, cust_industry, cust_level, cust_linkman, cust_phone, cust_mobile)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
在一方配置inverse="true",在多方配置cascade="save-update"
* save的最终方案,开发中就这么用
*/
@Test
public void run13() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
// 级联保存
Customer c1 = new Customer();
c1.setCust_name("meimei");
// 创建2个联系人
Linkman l1 = new Linkman();
l1.setLkm_name("xiongda");
Linkman l2 = new Linkman();
l2.setLkm_name("xionger");
// 单向关联
l1.setCustomer(c1);
l2.setCustomer(c1);
// 保存数据
session.save(l1);
session.save(l2);
tx.commit();
}
看sql:
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate:
insert
into
cst_customer
(cust_name, cust_user_id, cust_create_id, cust_source, cust_industry, cust_level, cust_linkman, cust_phone, cust_mobile)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
源码下载
2. inverse用来维护外键的
一、只配置cascade="save-update"
1.1 配置
只在customer.hbm.xml中配置cascade="save-update"1.2 测试代码
/** * cascade和inverse的区别 */ @Test public void run12() { Session session = HibernateUtils.getCurrentSession(); Transaction tx = session.beginTransaction(); // 级联保存 Customer c1 = new Customer(); c1.setCust_name("meimei"); // 创建2个联系人 Linkman l1 = new Linkman(); l1.setLkm_name("xiongda"); Linkman l2 = new Linkman(); l2.setLkm_name("xionger"); // 单向关联 c1.getLinkmans().add(l1); c1.getLinkmans().add(l2); // 保存数据 session.save(c1); tx.commit(); }
1.3 运行效果
customer表中有一条数据linkman表中有两条数据,并且有外键
看sql:
log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Hibernate: insert into cst_customer (cust_name, cust_user_id, cust_create_id, cust_source, cust_industry, cust_level, cust_linkman, cust_phone, cust_mobile) values (?, ?, ?, ?, ?, ?, ?, ?, ?) Hibernate: insert into cst_linkman (lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?) Hibernate: insert into cst_linkman (lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?) Hibernate: update cst_linkman set lkm_cust_id=? where lkm_id=? Hibernate: update cst_linkman set lkm_cust_id=? where lkm_id=?
二、配置inverse="true"
2.1 配置
2.2 测试代码
/** * cascade和inverse的区别 */ @Test public void run12() { Session session = HibernateUtils.getCurrentSession(); Transaction tx = session.beginTransaction(); // 级联保存 Customer c1 = new Customer(); c1.setCust_name("meimei"); // 创建2个联系人 Linkman l1 = new Linkman(); l1.setLkm_name("xiongda"); Linkman l2 = new Linkman(); l2.setLkm_name("xionger"); // 单向关联 c1.getLinkmans().add(l1); c1.getLinkmans().add(l2); // 保存数据 session.save(c1); tx.commit(); }
2.3 运行效果
linkman里面没有外键了
看sql:
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate:
insert
into
cst_customer
(cust_name, cust_user_id, cust_create_id, cust_source, cust_industry, cust_level, cust_linkman, cust_phone, cust_mobile)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
三、最终方案
在一方配置inverse="true",在多方配置cascade="save-update"3.1 配置
3.2 测试代码
/*** save的最终方案,开发中就这么用
*/
@Test
public void run13() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
// 级联保存
Customer c1 = new Customer();
c1.setCust_name("meimei");
// 创建2个联系人
Linkman l1 = new Linkman();
l1.setLkm_name("xiongda");
Linkman l2 = new Linkman();
l2.setLkm_name("xionger");
// 单向关联
l1.setCustomer(c1);
l2.setCustomer(c1);
// 保存数据
session.save(l1);
session.save(l2);
tx.commit();
}
3.3 运行效果
看sql:
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate:
insert
into
cst_customer
(cust_name, cust_user_id, cust_create_id, cust_source, cust_industry, cust_level, cust_linkman, cust_phone, cust_mobile)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
cst_linkman
(lkm_name, lkm_gender, lkm_phone, lkm_mobile, lkm_email, lkm_qq, lkm_position, lkm_memo, lkm_cust_id)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
源码下载
相关文章推荐
- Hibernate中Inverse和cascade的区别
- Hibernate的学习之路二十五(cascade和inverse的区别)
- hibernate Inverse 和 cascade的区别
- hibernate框架中inverse和cascade的使用总结
- hibernate里inverse与cascade标签的作用以及区别
- [转]hibernate---- Inverse 和 cascade区别
- Hibernate的学习之路二十五(cascade和inverse的区别)
- Hibernate中cascade和inverse的区别与用法
- Hibernate的学习之路二十五(cascade和inverse的区别)
- Hibernate-inverse和cascade的区别
- hibernate中inverse和cascade的区别
- Hibernate的学习之路二十五(cascade和inverse的区别)
- 面试题——Hibernate中Inverse和Cascade的区别
- Hibernate的学习之路二十五(cascade和inverse的区别)
- Hibernate的学习之路二十五(cascade和inverse的区别)
- Hibernate的学习之路二十五(cascade和inverse的区别)
- Hibernate的学习之路二十五(cascade和inverse的区别)
- 【转】Hibernate中Cascade和Inverse的区别
- 【Hibernate】的inverse与cascade区别?
- Hibernate的学习之路二十五(cascade和inverse的区别)