青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

brent's hut

關(guān)于Hibernate的記錄

我和hibernate的第一次親密:

我用的數(shù)據(jù)庫(kù)是mssql,用middlegen稀里嘩啦生成一堆文件。編譯運(yùn)行,hibernate報(bào)告一堆異常,大概是說(shuō),MSSQL JDBC抗議說(shuō)他不能讀取已經(jīng)讀過(guò)的字段,所以hibernate不能生成需要的collection。最后icepeak傳給我一個(gè)JSQLConnect,終于把這個(gè)問(wèn)題解決了。

設(shè)置hibernate生成定制的主鍵ID

在和hibernate親密接觸之后,我想按照自己的想法來(lái)設(shè)計(jì)組織機(jī)構(gòu).對(duì)于Organ,Department,Post和Stuff.我希望這樣設(shè)計(jì)主鍵的ID,類型都是char,格式為:
Organ0000000001
Dept0000000001
Post0000000001
Stuff0000000002

修改middlegen產(chǎn)生的.hbm.xml文件:

......
<class
??? name="com.abcdefg.hibernate.Organ"
??? table="Organ"
>
??? <id
??????? name="organId"
??????? type="java.lang.String"
??????? column="OrganId"
??? >
??????? <generator class="hbtest.PkGenerator">
??????????? <param name="table">PKGenerator_table</param>
??????????? <param name="column">NextOrganId</param>
??????????? <param name="max_lo">0</param>
?</generator>
??? </id>
......
</class>

找到的資料說(shuō):"如果需要采用定制的主鍵產(chǎn)生算法,則在此處配置主鍵生成器,主鍵生成器必須實(shí)現(xiàn)net.sf.hibernate.id.IdentifierGenerator 接口".我找了半天都沒(méi)找到net.sf.hibernate.id.IdentifierGenerator.其實(shí)只要從hibernate自身提供的一些主鍵生成器繼承就可以,從hibernate的源文件可以看到這些主鍵生成器實(shí)現(xiàn)的接口是org.hibernate.id

我的PkGenerator.java文件:
package hbtest;

import org.hibernate.id.TableHiLoGenerator;
import java.io.Serializable;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.type.Type;
import org.hibernate.type.IntegerType;
import org.hibernate.util.PropertiesHelper;

public class PkGenerator
??? extends TableHiLoGenerator {

? private String columnName;

? public void configure(Type type, Properties params, Dialect d) {
??? super.configure(new IntegerType(), params, d);
??? this.columnName = PropertiesHelper.getString(COLUMN, params,
???????????????????????????????????????????????? DEFAULT_COLUMN_NAME);
? }

? public synchronized Serializable generate(SessionImplementor session,
??????????????????????????????????????????? Object obj) throws
????? HibernateException {
??? Object result = super.generate(session, obj);
??? String strNumber = result.toString();
??? StringBuffer strResult = new StringBuffer("");
??? if (columnName.compareToIgnoreCase("NextOrganId") == 0) {
????? strResult.append("Organ");
??? }
??? else if(columnName.compareToIgnoreCase("NextDeptId") == 0){
????? strResult.append("Dept");
??? }
??? ......

??? if (strNumber.length() > 10)
????? throw new HibernateException("The generated " + strResult +
?????????????????????????????????? "Id is too long!");
??? else if (strNumber.length() == 10) {
????? strResult.append(strNumber);
??? }
??? else {
??????? int count = 10 - strNumber.length();
??????? while (count > 0) {
??????? strResult.append("0");
??????? count--;
????? }
????? strResult.append(strNumber);
??? }
??? return strResult.toString();
? }
}

實(shí)現(xiàn)了以后發(fā)現(xiàn)在這些主鍵前面添加"Organ","Dept"之類的并不是特別有用,而且我開(kāi)始的出發(fā)點(diǎn)還是錯(cuò)的.也許我應(yīng)該建立更多的映射表...?

Hibernate的初級(jí)指南

hibernate貼心的地方

驗(yàn)證了一下,我的擔(dān)心終于被證實(shí)是多余的了,我擔(dān)心的是hibernate會(huì)為同一條記錄產(chǎn)生一堆不同的對(duì)象。
我覺(jué)得使hibernate真正實(shí)用的條件:為同一條記錄產(chǎn)生的多個(gè)對(duì)象是同一個(gè)對(duì)象。當(dāng)然前提是設(shè)置了主鍵。
hibernate也許是將當(dāng)前讀出的對(duì)象保存在一個(gè)哈希表,在讀一個(gè)新對(duì)象的時(shí)候會(huì)先從這個(gè)哈希表中查找。好像這并不是多困難的事情。
?
但多線程情況下就有所不同了..
因?yàn)镠ibernate說(shuō)(對(duì)于Session):
It is not intended that implementors be threadsafe. Instead each thread/transaction should obtain its own instance from a SessionFactory
?
Session并沒(méi)有要求是線程安全的,而通過(guò)實(shí)驗(yàn)表明記錄和對(duì)象的一一對(duì)應(yīng)只存在于同一個(gè)Session中。這也是hibernate的文檔中HibernateUtil類使用ThreadLocal的原因吧。
所以對(duì)于多線程的情況,在不同的線程中,對(duì)應(yīng)同一條記錄的對(duì)象是不同的。

(另hibernate有二級(jí)緩存,是全局的緩存,可以用來(lái)減少數(shù)據(jù)庫(kù)負(fù)載,二級(jí)緩存的功能需要設(shè)置才會(huì)啟用)

Hibernate中修改多對(duì)多關(guān)系的屬性:

<middlegen>項(xiàng)中有如下<table>配置:
?? <table generate="true" name="Post"/>
?? <table generate="true" name="Stuff"/>
?? <many2many>
????? <tablea generate="true" name="Post" />
????? <jointable name="PostStuff" generate="true" />
????? <tableb generate="true" name="Stuff" />
?? </many2many>
即表Post與Stuff的關(guān)系是多對(duì)多,而且表PostStuff中一個(gè)字段時(shí)JoinDate:員工加入部門的時(shí)間。

我現(xiàn)在想加入一條Post記錄,一條Stuff記錄,然后設(shè)置Stuff加入Post的時(shí)間。經(jīng)過(guò)多次嘗試,代碼如下:
?? ...
?? Dept dept = ....
?? Post post = new Post("third post1",dept,new HashSet(),new HashSet());
?? Stuff stuff = new Stuff("third stuff",new HashSet(),new HashSet());
?? session.save(stuff);
?? session.save(post);
?? post.getStuffs().add(stuff);
?? //stuff.getPosts().add(post);/*不能與上一行并存,會(huì)有異常,因?yàn)槭且粋€(gè)死循環(huán)?*/
?? PostStuff postStuff = (PostStuff)session.createQuery("from PostStuff where PostId = '" + post.getPostId() + "' AND StuffId = '" + stuff.getStuffId() + "'").iterate().next();
?? postStuff.setJoinDate(new java.util.Date());
?? tx.commit();
?? HibernateUtil.closeSession();
?? ...

post.getStuffs().add(stuff);在兩個(gè)Save()之后,而且沒(méi)有調(diào)用session.flush(),但是createQuery能夠得到PostStuff說(shuō)明HQL是先從內(nèi)存中查詢數(shù)據(jù)的。不需要調(diào)用session.flush()來(lái)寫入數(shù)據(jù)庫(kù),因?yàn)閠x.commit()會(huì)自動(dòng)調(diào)用。

可以用session.persist(stuff)來(lái)替換session.save(stuff),我暈,明明save有說(shuō)明會(huì)創(chuàng)建id,而persist沒(méi)有說(shuō)明會(huì)創(chuàng)建id的(但實(shí)際上是創(chuàng)建了)。

試圖用以下替代post.getStuffs().add(stuff):
?? PostStuff postStuff = new PostStuff();
?? postStuff.setPost(post);
?? postStuff.setStuff(stuff);
?? postStuff.setJoinDate(new java.util.Date());
?? postStuff.setComp_id(new PostStuffPK(post.getPostId(),stuff.getStuffId()));
?? post.getPostStuffs().add(postStuff);
結(jié)果是雖然沒(méi)有異常,但并不會(huì)添加一條關(guān)系。

或者

?? session.flush();
?? session.refresh(stuff);
?? ((PostStuff)(stuff.getPostStuffs().iterator().next())).setJoinDate(new java.util.Date());
注意這些代碼只是用來(lái)作試驗(yàn)用的

posted on 2005-12-19 09:23 brent 閱讀(550) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Java

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区四区精品| 欧美大尺度在线观看| 亚洲一区在线看| 国产精品电影网站| 午夜亚洲伦理| 欧美高清在线| 亚洲午夜精品一区二区| 国产日韩欧美高清免费| 久久久青草婷婷精品综合日韩| 亚洲成色777777在线观看影院| 日韩视频不卡中文| 国产精品一二三四| 久久久久一区| av成人免费| 久久综合电影一区| 99re6这里只有精品| 国产视频精品免费播放| 美女诱惑一区| 午夜精品福利一区二区三区av| 麻豆成人91精品二区三区| 99综合在线| 韩国成人福利片在线播放| 欧美日本视频在线| 久久国产手机看片| 日韩一区二区久久| 两个人的视频www国产精品| 一区二区三区免费看| 国内外成人在线视频| 欧美日精品一区视频| 久久这里只有| 亚洲欧美综合网| 亚洲精品国精品久久99热| 久久久久女教师免费一区| 一区二区三区久久精品| 在线日韩一区二区| 国产精品久久综合| 欧美精品一区二区三区蜜臀| 久久成人综合视频| 在线亚洲自拍| 91久久亚洲| 欧美xart系列高清| 久久精品夜色噜噜亚洲aⅴ| 一区二区三区免费网站| 亚洲黄色成人| 狠狠狠色丁香婷婷综合久久五月| 国产精品毛片一区二区三区| 欧美第十八页| 免费观看30秒视频久久| 久久精品理论片| 亚洲欧美成人网| 在线中文字幕一区| 日韩视频在线观看国产| 欧美激情一区二区久久久| 久久亚洲综合| 久久久一区二区| 久久精品日韩欧美| 久久国产精品亚洲va麻豆| 亚洲亚洲精品三区日韩精品在线视频| 亚洲日本激情| 亚洲精品国产精品久久清纯直播| 亚洲国产高清一区二区三区| 黄网站免费久久| 黄色成人小视频| 狠狠色狠狠色综合人人| 国内精品久久久久久久97牛牛| 国产麻豆视频精品| 国产日产精品一区二区三区四区的观看方式 | 性欧美超级视频| 亚洲在线观看视频网站| 亚洲一区二区在线免费观看| 亚洲婷婷综合色高清在线| 亚洲视频久久| 亚洲欧美日韩国产成人| 亚欧美中日韩视频| 久久精品电影| 另类春色校园亚洲| 欧美韩国在线| 欧美日本亚洲韩国国产| 欧美日韩精品一区二区三区四区 | 毛片av中文字幕一区二区| 久久综合伊人77777| 麻豆视频一区二区| 欧美激情在线免费观看| 欧美另类极品videosbest最新版本| 欧美精品麻豆| 国产精品swag| 国产视频久久久久久久| 激情欧美日韩| 亚洲精品护士| 亚洲在线一区| 久久久蜜臀国产一区二区| 能在线观看的日韩av| 亚洲国产日韩欧美在线图片| 日韩西西人体444www| 亚洲女同同性videoxma| 久久成人免费电影| 免费亚洲电影在线观看| 欧美日韩性视频在线| 国产伦精品一区二区三区视频黑人 | 亚洲黄色一区| 亚洲一区二区免费| 久久精品国产久精国产一老狼| 蜜桃久久av一区| 欧美日韩在线影院| 国内欧美视频一区二区| 日韩午夜电影在线观看| 性欧美暴力猛交69hd| 欧美91福利在线观看| 一本色道久久综合亚洲精品不卡| 欧美一区二区国产| 欧美精品一区二区三区久久久竹菊 | 中日韩午夜理伦电影免费| 欧美一区亚洲| 欧美日韩999| 激情久久久久久久| 在线亚洲欧美| 欧美成人精品一区二区三区| 在线一区二区三区四区| 久久综合激情| 国产精品亚洲综合| 亚洲乱码久久| 鲁大师成人一区二区三区| 艳女tv在线观看国产一区| 久久久青草婷婷精品综合日韩| 欧美婷婷久久| 亚洲激情自拍| 久久午夜视频| 亚洲先锋成人| 欧美日本一区二区三区| 又紧又大又爽精品一区二区| 亚洲欧美日韩精品久久久| 亚洲国产乱码最新视频| 久久精品中文字幕一区二区三区 | 国产日本亚洲高清| 一区二区三区欧美日韩| 欧美国产一区二区在线观看| 亚洲午夜日本在线观看| 欧美精品一区二| 亚洲黄色一区二区三区| 久久久免费精品视频| 亚洲综合三区| 国产精品久久国产三级国电话系列 | 午夜精品一区二区三区在线| 最新69国产成人精品视频免费| 久久综合电影| 在线电影院国产精品| 久久久精品视频成人| 亚洲一品av免费观看| 欧美视频手机在线| 一区二区三区四区国产精品| 91久久精品日日躁夜夜躁国产| 久久人人爽人人| 激情偷拍久久| 麻豆精品网站| 久久在线播放| 91久久黄色| 亚洲国产精品一区在线观看不卡 | 国产精品视频免费在线观看| 亚洲一区自拍| 亚洲午夜黄色| 国产欧美一区二区精品忘忧草| 亚洲影院在线| 亚洲午夜精品福利| 国产精品试看| 久久精品国产成人| 欧美在线视频在线播放完整版免费观看| 国产视频精品va久久久久久| 久久久精品五月天| 久久久久久电影| 亚洲国产高清在线| 亚洲国产精品成人综合| 欧美精品色网| 亚洲视频一二| 亚洲综合电影| 一区二区三区在线免费视频| 欧美 日韩 国产一区二区在线视频| 另类尿喷潮videofree | 男男成人高潮片免费网站| 男男成人高潮片免费网站| 99国产精品久久久久久久成人热| 日韩一级不卡| 国产日韩欧美综合| 欧美成人久久| 欧美视频成人| 久久精品人人| 免费视频一区| 亚洲欧美日韩精品久久亚洲区 | 六月婷婷一区| 一本色道久久综合亚洲精品婷婷| 亚洲无线视频| 在线观看国产一区二区| 亚洲激情偷拍| 国产精品网站在线播放| 麻豆精品在线观看| 欧美日韩国产在线播放| 久久国产66| 欧美久久久久久| 久久国产精品黑丝| 欧美高清视频在线观看| 欧美呦呦网站|