日歷
導(dǎo)航
常用鏈接
留言簿(2)
隨筆檔案
搜索
最新評論

閱讀排行榜
評論排行榜
|
2006年5月9日
在查詢時報下面的錯誤,使用的是hibernate,oracle數(shù)據(jù)庫,并做了集群 WARN - SQL Error: 17002, SQLState: null ERROR - Io 異常:Software caused connection abort: recv failed 請問是什么原因造成的,謝謝!
???參考hibernate對hql語句的解析,寫了對SQL語句的解析,并生成相應(yīng)的對象。主要為了自定義查詢條件進行查詢和對查詢結(jié)果進行二次查詢使用。目前只支持簡單的sql語句的解析,不支持子查詢的解析。在壓縮包中只給出了解析程序,沒有包括對應(yīng)的查詢對象。鏈接:程序源碼。
項目要求能獲得CONNECTION便于對數(shù)據(jù)庫的操作,并要求能與spring中的事務(wù)處于同一事務(wù)中。實現(xiàn): 1.定義SanHibernateTransactionManager類,繼承spring中的
HibernateTransactionManager,便于獲得HibernateTransactionObject。把這個類注入到spring容器中。
<
bean?
id
="transactionManager"
????????class
="com.san.tools.hibernate.SanHibernateTransactionManager"
>
????????
<
property?
name
="sessionFactory"
>
????????????
<
ref?
bean
="sessionFactory"
/>
????????
</
property
>
????
</
bean
>
?
 public?class?SanHibernateTransactionManager?extends?HibernateTransactionManager {

 ????public?Object?getTransactionObj() {
????????return?super.doGetTransaction();
????}
???? ????????
 ????public?boolean?existsTransaction(Object?transaction) {
????????return?super.isExistingTransaction(transaction);
????}
????
 ????public?Session?getSession() {
????????return?SessionFactoryUtils.getSession(this.getSessionFactory(),?true);
????}
????
 ????public?Session?getCurrentSession() {
????????HibernateTransactionObject?obj?=?(HibernateTransactionObject)this.getTransactionObj();
????????return?obj.getSessionHolder().getSession();
????}
} 2.開始事務(wù)。
public
?
void
?beginTransaction()?
throws
?SQLException
{
????????
//
TransactionDefinition.PROPAGATION_REQUIRED:支持當(dāng)前的事務(wù),如果不存在就創(chuàng)建一個新的。
????????DefaultTransactionDefinition?transactionDef?
=
?
new
?DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
????????
//
創(chuàng)建一個TransactionStatus
????????TransactionStatus?transactionStatus?
=
?transactionManager.getTransaction(transactionDef);
????????
//
取得綁定到當(dāng)前線程上的session。從HibernateTransactionObject中獲得,這里修改了spring中HibernateTransactionManager.java文件,
????????
//
將private?HibernateTransactionObject改為protected?HibernateTransactionObject
????????Session?session?
=
?transactionManager.getCurrentSession();
 ??????
if
(session?
!=
?
this
.session)
{
????????????System.err.println(
"
session不是同一對象
"
);
????????}
????????
//
將transactionStatus保存到集合中
????????
this
.transactionStatuss.add(transactionStatus);
????????
this
.beginTransaction?
=
?
true
;
????}
3.提交事務(wù)
public
?
void
?commit()?
throws
?HibernateException,SQLException
{
????????
//
循環(huán)TransactionStatus集合,直至第一個transactionStatus被提交時,才真正提交
????????
for
(
int
?i?
=
?transactionStatuss.size()?
-
?
1
;i?
>=
?
0
;i
--
)
{
????????????DefaultTransactionStatus?transactionStatus?
=
?(DefaultTransactionStatus)transactionStatuss.get(i);
????????????transactionManager.commit(transactionStatus);
????????}
????????transactionStatuss.clear();
????}
4.回滾事務(wù)
 public?void?rollBack() {
 ????????for(int?i?=?transactionStatuss.size()?-?1;i?>=?0;i--) {
????????????DefaultTransactionStatus?transactionStatus?=?(DefaultTransactionStatus)transactionStatuss.get(i);
????????????transactionManager.rollback(transactionStatus);
????????}
????????transactionStatuss.clear();
????}???????貼出這段代碼一是為了共享一點所得,二是希望能指出中間有什么不正確的地方(心里不是很有底  )
 function doPrint(servlet, form) {
var oWord = new ActiveXObject("Word.Application");
var oDoc = oWord.Documents.Add("",0,1);
var strFields = form.elements["gFields"].value;
var fields = strFields.split(",");
oWord.Selection.TypeParagraph();
oWord.Selection.Style = oDoc.Styles("正文");
var wdPageBreak = 7;
oWord.Selection.InsertBreak(wdPageBreak); //生成下一頁,用于產(chǎn)生正文部分。當(dāng)前頁用于生成目錄
 for(var i=0;i<fields.length;i++) {
form.elements["gFields"].value = fields[i];
var oRange = oWord.Selection.Range;
pastObj(servlet,form,oWord);
}
oWord.Selection.TypeBackspace(); //去掉最后一頁
oWord.Selection.HomeKey(6); //返回首頁的第一行
oWord.Selection.Font.Bold = 9999998; //加粗
oWord.Selection.Font.Size = 16; //設(shè)置字體大小(3號)
oWord.Selection.TypeText("目錄");
oWord.Selection.ParagraphFormat.Alignment = 1; //居中
oWord.Selection.TypeParagraph(); //換行
oWord.Selection.Style = oDoc.Styles("正文"); //樣式設(shè)為正文
oWord.Application.WindowState = 2;
oWord.Application.WindowState = 0;
//生成目錄
oWord.ActiveDocument.TablesOfContents.add(oWord.Selection.Range,true,1,3,false,"",true,true,"",true,true,true);
oWord.ActiveDocument.TablesOfContents(1).TabLeader = 1
oWord.ActiveDocument.TablesOfContents.Format = 0;
oWord.Selection.Sections(1).Footers(1).PageNumbers.Add(2,true); //在頁腳出生成頁碼
oWord.Application.Visible = true;
//退出word
//oWord.Quit();
oWord = null;
}
 function pastObj(servlet, form,oWord) {
 var ajax = new AJAXInteraction(servlet, function(requestText) {
 if (requestText == "FAILED") {
return;
}
 else {
var oDoc = oWord.ActiveDocument;
var sele = oWord.Selection;
sele.Style = oDoc.Styles("標題 1"); //設(shè)置樣式為標題1
var tempObj = document.getElementById("content");
tempObj.innerHTML = requestText;
var title = document.getElementById("title_"+form.elements["gFields"].value).value;
oWord.Selection.TypeText(title); //取得單位名稱,并設(shè)為標題
sele.TypeParagraph(); //換行
sele.Style = oDoc.Styles("正文"); //設(shè)置樣式為正文
var arrs = requestText.split("^^^");
 for(var i=0;i<arrs.length;i++) {
var obj = document.getElementById("content");
obj.innerHTML = arrs[i];
var sel = document.body.createTextRange();
sel.moveToElementText(obj);
sel.select();
sel.execCommand("Copy");
sele.paste();
var wdPageBreak = 7;
sele.InsertBreak(wdPageBreak); //生成下一頁
}
//sele.TypeParagraph();
//sele.TypeText("測試1");
//sele.Style = oDoc.Styles("正文");
}
});
ajax.doPost(getRequestBody(form));
}
摘要: 閱讀全文
SpeedProductLoad.java
public
?
class
?SpeedProductLoad?
{
????
private
?SpeedProduct?product;
????
private
?SpeedVehicleType?vehicleType;
????
private
?Double?loaded;
????
private
?Long?lineNo;
????
 ????
public
?SpeedProductLoad(SpeedProduct?product,SpeedVehicleType?vehicleType,Double?loaded,Long?lineNo)
{
????????
this
.product?
=
?product;
????????
this
.vehicleType?
=
?vehicleType;
????????
this
.loaded?
=
?loaded;
????????
this
.lineNo?
=
?lineNo;
????}
}
hbm中的映射: <map?name="vehicleTypes"?table="PRODUCT_VEHICLETYPE"?lazy="true"?inverse="false"?cascade="all">
????????????<key?column="PRODUCT_ID"/>
????????????<index-many-to-many?class="com.vtradex.speedtms.model.base.vehicle.SpeedVehicleType"?column="VEHICLE_TYPE_ID"/>
????????????<element?type="double"?column="FULLYLOADED"/>
</map>?HQL語句:
SELECT?new?com.vtradex.speedtms.model.base.product.SpeedProductLoad(product,index(vehicleTypes),vehicleTypes,product.id)
????????????????FROM?SpeedProduct?AS?product
????????????????LEFT?JOIN?FETCH?product.vehicleTypes?AS?vehicleTypes
????????????????WHERE?1=1??AND?product.disabled=false
????????????????/~code:?AND?product.code?LIKE?{code}?~/
????????????????/~name:?AND?product.name?LIKE?{name}?~/
????????????????/~company.id:?AND?product.company.id={company.id}?~/
????????????????/~product.uom:?AND?product.uom={product.uom}?~/
????????????????/~productType.id:?AND?product.productType.id={productType.id}?~/
|