hibernate_OneToMany_CURD_demo_and_note

2024-04-03 19:38

本文主要是介绍hibernate_OneToMany_CURD_demo_and_note,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

note:

(3)curd 增删改查
(4)在映射po类里面,有set的为一的一方。
(5)Address.hbm.xml<!-- 多对一的关键配置 --><many-to-one name="man" class="dao.po.Man" fetch="select"><column name="manid"/></many-to-one>Man.hbm.xml<!-- 一对多的关键配置 --><!-- 一般在"一"的这一方设置inverse="false" 并且只能在set一方来设置。加上cascade 这样可以级联操作 --><set name="addresses" inverse="false" cascade="all"><key><column name="manid" /></key><one-to-many class="dao.po.Address" /></set>
(6)在级联增加时候,先添加一的一方,否则会多出不少update的sql语句。
(7)如果级联删除就纯删除一的一方,在多的一方会出现脏数据。
(8)如果在级联更新时候,不将一的一方传入,则会在之后hibernate生成的update语句中将多的一方外键值设为null.
(9)如果在session关闭之后要用级联数据,需要在session关闭之前调用Hibernate.initialize(...)来放内存中先。

 

 

=

spring and hiberante
(1)private static void find(){//下面如果直接获取address会出现session关闭,懒加载的问题//但是如果用下面的方法,又觉得代码敲太多了。List<Man> manList = hibernateTemplate.find("from Man");Man man = manList.get(0);List<Address> addressList = hibernateTemplate.findByNamedParam("from Address address where manid = :manid", "manid", man.getId());System.out.println(addressList.size());//这种方法不好的地方在于调用了session,会出现session关闭的问题。Session session = hibernateTemplate.getSessionFactory().openSession();Query query = session.createQuery("from Man");List<Man> manList = query.list();System.out.println(manList.get(0).getAddresses().size());session.close();}

 

=

(2)spring配置文件里面的show_sql写法。
<property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop><prop key="hibernate.show_sql">true</prop></props></property>

 

code:

package com.test.go;import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;import com.test.Address;
import com.test.Man;
import com.test.util.MyHibernateTemplate;public class OntoMany extends MyHibernateTemplate
{public static void main(String[] args){
//		add();
//		delete(26);
//		update(35);find();}private static void add(){Man man = new Man();man.setName("tianjun");Address temp1 = new Address();temp1.setAddressname("123");temp1.setMan(man);Address temp2 = new Address();temp2.setAddressname("3333");temp2.setMan(man);Address temp3 = new Address();temp3.setAddressname("fa");temp3.setMan(man);Address temp4 = new Address();temp4.setAddressname("h");temp4.setMan(man);hibernateTemplate.saveOrUpdate(man);hibernateTemplate.saveOrUpdate(temp1);hibernateTemplate.saveOrUpdate(temp2);hibernateTemplate.saveOrUpdate(temp3);}private static void delete(int id){Man man = new Man();man.setId(id);hibernateTemplate.delete(man);}private static void update(int id){Address temp = new Address();temp.setId(id);temp.setAddressname("gga");Man man = new Man();man.setId(27);temp.setMan(man);hibernateTemplate.saveOrUpdate(temp);}private static void find(){//下面如果直接获取address会出现session关闭,懒加载的问题//但是如果用下面的方法,又觉得代码敲太多了。
//		List<Man> manList = hibernateTemplate.find("from Man");
//		Man man = manList.get(0);
//		List<Address> addressList = hibernateTemplate.findByNamedParam("from Address address where manid = :manid", "manid", man.getId());
//		System.out.println(addressList.size());//这种方法不好的地方在于调用了session,会出现session关闭的问题。
//		Session session = hibernateTemplate.getSessionFactory().openSession();
//		Query query = session.createQuery("from Man");
//		List<Man> manList = query.list();
//		System.out.println(manList.get(0).getAddresses().size());
//		session.close();}
}

 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><!-- 配置数据源 --><bean id="SQLCOOL"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.microsoft.jdbc.sqlserver.SQLServerDriver"></property><property name="url"value="jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=test"></property><property name="username" value="sa"></property><property name="password" value="130727"></property></bean><!-- 配置session工厂 --><bean id="CoolSessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="SQLCOOL" /></property><property name="mappingResources"><list><value>com/test/T1.hbm.xml</value><value>com/test/T2.hbm.xml</value><value>com/test/Boy.hbm.xml</value><value>com/test/Host.hbm.xml</value><value>com/test/Man.hbm.xml</value><value>com/test/Address.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop><prop key="hibernate.show_sql">true</prop></props></property></bean><!-- 配置Hibernate模板类 --><bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory"><ref bean="CoolSessionFactory" /></property><property name="allowCreate"><value>true</value></property></bean>
</beans>

 

 

这篇关于hibernate_OneToMany_CURD_demo_and_note的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873799

相关文章

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

(南京观海微电子)——GH7006 Application Note

Features ⚫ Single chip solution for a WXGA α-Si type LCD display ⚫ Integrate 1200 channel source driver and timing controller ⚫ Display Resolution: ◼ 800 RGB x 480 ◼ 640 RGB x 480 ⚫ Display int

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

linux 内核提权总结(demo+exp分析) -- 任意读写(四)

hijack_modprobe_path篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermod

linux 内核提权总结(demo+exp分析) -- 任意读写(三)

hijack_prctl篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统

linux 内核提权总结(demo+exp分析) -- 任意读写(二)

hijack_vdso篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     vdso: 内核实现的一个动态库,存在于内核,然后映射到用户态空间,可由用户态直接调用 内核中的vdso如果被修改

linux 内核提权总结(demo+exp分析) -- 任意读写(一)

cred篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   每个线程在内核中都对应一个线程结构块thread_infothread_info中存在task_struct类型结构体 struct t