one to many的注意点
2015-08-09 14:30
465 查看
先构建maven
1.添加存储库
2.添加hibernate及数据库驱动
3.数据库的对应关系
(图以及代码是网上找的)
在stock
在stock_detail
这样可以构成双向映射,双向映射有诸多好处,我们说说如何达到减少sql
在stock
有两个需要注意的属性设置
inverse
lazy
lazy:没什么好介绍的
inverse是决定外键是由谁来维护的,为false则本方,true为对方
当为false时,本方可以维护多的一方,这个显然不是一对多双向映射的好处,试想既然是双向映射,外键油stock_detal的一方维护就可以了,不然insert数据时会多出update外键的sql
那么我们怎么让外键持有者来维护外键呢?
先看看stock_detail的映射
在看看insert数据时
由于外键参考必须先存在数据库中,所以我们先插入stock
接着是插入stock_detail,想想stock_detail怎么对应上stock呢?显然是外键,那么油两种方案,熟悉sql的必然知道
1.先插入不带外键的stock_detail,让后用stock对应的stock_details去更新stock_detail表的外键,这个就是inverse为false的情况(开始时外键为空,初学者不要认为外键不可为空)
2.现在站在stock_detail的角度,我们既然知道"我们"是属于那个stock了,这样就可以直接用一条语句插入stock_detail表了,那么怎么让hibernate知道我们已经是属于那个stock的呢,其实是通过上面的
1.添加存储库
<repositories> <repository> <id>JBoss repository</id> <url>http://repository.jboss.org/nexus/content/groups/public/</url> </repository> </repositories>
2.添加hibernate及数据库驱动
<!-- MySQL database driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.15</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.3.Final</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.12.1.GA</version> </dependency>
3.数据库的对应关系
(图以及代码是网上找的)
在stock
private Set<StockDailyRecord> stockDailyRecords = new HashSet<StockDailyRecord>(0);
在stock_detail
private Stock stock;
这样可以构成双向映射,双向映射有诸多好处,我们说说如何达到减少sql
在stock
<set name="stockDailyRecords" table="stock_daily_record" inverse="true" lazy="true" fetch="select"> <key> <column name="STOCK_ID" not-null="true" /> </key> <one-to-many class="com.mkyong.stock.StockDailyRecord" /> </set>
有两个需要注意的属性设置
inverse
lazy
lazy:没什么好介绍的
inverse是决定外键是由谁来维护的,为false则本方,true为对方
当为false时,本方可以维护多的一方,这个显然不是一对多双向映射的好处,试想既然是双向映射,外键油stock_detal的一方维护就可以了,不然insert数据时会多出update外键的sql
那么我们怎么让外键持有者来维护外键呢?
先看看stock_detail的映射
<many-to-one name="stock" class="com.mkyong.stock.Stock" fetch="select"> <column name="STOCK_ID" not-null="true" /> </many-to-one>
在看看insert数据时
Stock stock = new Stock(); stock.setStockCode("7052"); stock.setStockName("PADINI"); session.save(stock); StockDailyRecord stockDailyRecords = new StockDailyRecord(); stockDailyRecords.setPriceOpen(new Float("1.2")); stockDailyRecords.setPriceClose(new Float("1.1")); stockDailyRecords.setPriceChange(new Float("10.0")); stockDailyRecords.setVolume(3000000L); stockDailyRecords.setDate(new Date()); stockDailyRecords.setStock(stock); stock.getStockDailyRecords().add(stockDailyRecords); session.save(stockDailyRecords);
由于外键参考必须先存在数据库中,所以我们先插入stock
接着是插入stock_detail,想想stock_detail怎么对应上stock呢?显然是外键,那么油两种方案,熟悉sql的必然知道
1.先插入不带外键的stock_detail,让后用stock对应的stock_details去更新stock_detail表的外键,这个就是inverse为false的情况(开始时外键为空,初学者不要认为外键不可为空)
2.现在站在stock_detail的角度,我们既然知道"我们"是属于那个stock了,这样就可以直接用一条语句插入stock_detail表了,那么怎么让hibernate知道我们已经是属于那个stock的呢,其实是通过上面的
stockDailyRecords.setStock(stock);
相关文章推荐
- Java输入输出流-总结
- printf()、sprintf()、vprintf()、vsprintf()、有符号|无符号数
- 各个JSON技术的比较
- lua for通过循环table一些差异
- 单例模式的懒汉式在多线程的问题
- Spring缓存注解@Cache,@CachePut , @CacheEvict,@CacheConfig使用
- 慕课网 Java 入门 第三季 学习笔记
- 目录树的建立和输出
- OJ上判题时出现的运行结果整理
- android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4
- 【转】iframe和父页,window.open打开页面之间的引用
- 花生壳+iis
- 个人使用SpringMVC框架项目的心得
- 随手小代码——最大子数组 联机算法
- POJ_3009 Curling 2.0(dfs)
- shell脚本条件判断
- 我的编程之路(二十八) 回首2014
- This site uses a plugin (application/baiducnff-activex)that is not supported 某次更新之后就开始出现了
- 检测和解决Android应用的性能问题
- 自己写的一个记录简历投递状态的小应用,可以分享校招信息哦~