﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-云自无心水自闲-随笔分类-Hibernate</title><link>http://www.blogjava.net/usherlight/category/37041.html</link><description>天平山上白云泉，云自无心水自闲。何必奔冲山下去，更添波浪向人间！</description><language>zh-cn</language><lastBuildDate>Mon, 10 Aug 2009 08:07:48 GMT</lastBuildDate><pubDate>Mon, 10 Aug 2009 08:07:48 GMT</pubDate><ttl>60</ttl><item><title>hibernate使用annotation来处理onetomany</title><link>http://www.blogjava.net/usherlight/archive/2009/08/10/290529.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Mon, 10 Aug 2009 05:24:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2009/08/10/290529.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/290529.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2009/08/10/290529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/290529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/290529.html</trackback:ping><description><![CDATA[<br />
1. 数据库的表结构<br />
CREATE TABLE&nbsp; `software` (<br />
&nbsp; `id` int(10) unsigned NOT NULL AUTO_INCREMENT,<br />
&nbsp; `name` varchar(45) NOT NULL,<br />
&nbsp; PRIMARY KEY (`id`)<br />
);<br />
<br />
<br />
CREATE TABLE&nbsp; `version` (<br />
&nbsp; `id` int(10) unsigned NOT NULL AUTO_INCREMENT,<br />
&nbsp; `publish_time` datetime NOT NULL,<br />
&nbsp; `software_id` int(10) unsigned NOT NULL,<br />
&nbsp; PRIMARY KEY (`id`)<br />
);<br />
<br />
2. java的class<br />
<br />
---------------------------------------<br />
Software.java<br />
<br />
import java.util.LinkedHashSet;<br />
import java.util.Set;<br />
<br />
import javax.persistence.Entity;<br />
<br />
@Entity<br />
public class Software {<br />
<br />
&nbsp;&nbsp;&nbsp; private Long id;<br />
&nbsp;&nbsp;&nbsp; private String name;<br />
&nbsp;&nbsp;&nbsp; private Set&lt;Version&gt; versions = new LinkedHashSet&lt;Version&gt;();<br />
<br />
&nbsp;&nbsp;&nbsp; @Id<br />
&nbsp;&nbsp;&nbsp; @GeneratedValue(strategy = GenerationType.IDENTITY)<br />
&nbsp;&nbsp;&nbsp; public Long getId() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return id;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void setId(Long id) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.id = id;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getName() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return name;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setName(String name) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.name = name;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; @OneToMany(cascade = { CascadeType.ALL }, mappedBy="software")<br />
&nbsp;&nbsp;&nbsp; @JoinColumn(name = "software_id")<br />
&nbsp;&nbsp;&nbsp; @Fetch(FetchMode.SUBSELECT)<br />
&nbsp;&nbsp;&nbsp; @OrderBy("id")<br />
&nbsp;&nbsp;&nbsp; public Set&lt;Version&gt; getVersions() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return version;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void setVersions(Set&lt;Version&gt; Versions) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.versions = versions;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
-----------------------------------------------------<br />
Version.java<br />
<br />
import java.util.Date;<br />
import javax.persistence.Entity;<br />
<br />
@Entity<br />
public class Version{<br />
&nbsp;&nbsp;&nbsp; private Long id;<br />
&nbsp;&nbsp;&nbsp; private Date publishTime;<br />
&nbsp;&nbsp;&nbsp; private Software software;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; @Id<br />
&nbsp;&nbsp;&nbsp; @GeneratedValue(strategy = GenerationType.IDENTITY)<br />
&nbsp;&nbsp;&nbsp; public Long getId() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return id;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void setId(Long id) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.id = id;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public Date getPublishTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return publishTime;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setPublishTime(Date publishTime) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.publishTime = publishTime;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })<br />
&nbsp;&nbsp;&nbsp; @JoinColumn(name = "software_id")<br />
&nbsp;&nbsp;&nbsp; public Software getSoftware() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return software;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void setSoftware(Software software) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.software = software;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
3. 测试代码<br />
<br />
Software software = new Software();<br />
software.setName("Windows");<br />
<br />
Version version = new Version;<br />
version.setPublishTime(new Date());<br />
version.setSoftware(software);<br />
<br />
software.getVersions().add(version);<br />
<br />
software.save();<br />
<br />
hibernate会自动生成两条insert语句，一条是software的insert语句，一条是version的insert语句。<br />
同样，如果删除software的话，也会生成两条delete语句<br /><img src ="http://www.blogjava.net/usherlight/aggbug/290529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2009-08-10 13:24 <a href="http://www.blogjava.net/usherlight/archive/2009/08/10/290529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate启动报错cannot simultaneously fetch multiple bags</title><link>http://www.blogjava.net/usherlight/archive/2008/12/30/249121.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Tue, 30 Dec 2008 05:03:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2008/12/30/249121.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/249121.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2008/12/30/249121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/249121.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/249121.html</trackback:ping><description><![CDATA[我使用的是annotation方式的hibernate配置。结果在启动Tomcat的时候报错：<br />
Invocation of init method failed; nested exception is org.hibernate.HibernateException: cannot simultaneously fetch multiple bags<br />
解决方法：<br />
去除Annotation中的所有FetchType="EAGAR"<br />
<br /><img src ="http://www.blogjava.net/usherlight/aggbug/249121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2008-12-30 13:03 <a href="http://www.blogjava.net/usherlight/archive/2008/12/30/249121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>