當前位置:首頁 » 編程語言 » hibernatesqltype
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hibernatesqltype

發布時間: 2022-09-10 04:21:22

⑴ 如何設置hibernate列印sql語句

只要加上下面這個語句就可以了 Log4j.propreties代碼 #輸出sql語句到日誌 log4j.logger.org.hibernate.SQL=debug #將對應的參數佔位符?換成傳入的參數 log4j.logger.org.hibernate.type=trace

⑵ hibernate使用sql查詢

看了下你的 SQL ,裡面打的是中文的問號,這個應該是英文的咧

⑶ 用hibernate生成資料庫,怎樣設置列的非空默認值

hibernate映射資料庫表如何使表中欄位默認值生效

純傑宗の0002 | 瀏覽 2133 次

推薦於2016-02-04 08:55:26最佳答案
解決方法: 在hibernate映射文件對資料庫表的描述中,在當前欄位處加入insert="false"語句,這時hibernate在進行插入操作時,只會為那些有實值的欄位賦值,而值為空白的欄位就會使用資料庫表中定義的默認值了。
舉例說明,表person:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

CREATE TABLE address (
i_id int(11) NOT NULL auto_increment,
c_address varchar(100) NOT NULL default '中國',
PRIMARY KEY (id)
)
address.hbm.xml:
<hibernate-mapping package="cn.com.lough.model">
<class
name="address "
table="address "
lazy="false"
>
<meta attribute="sync-DAO">true</meta>
<cache usage="read-write"/>
<id
name="IId"
type="integer"
column="i_id"
>
<generator class="native"/>
</id>
<property
name="C_Address"
column="c_address "
type="string"
not-null="false"
length="128"
/>
</hibernate-mapping>
運行程序
public regAddress(String a){ //傳入的值a未在網頁文本框里獲得任何值(家庭地址)
Address p = new Address ();
p.setAddress(a);
HiFactory.save(p);
}
此時hibernate生成的sql語句為insert into person(c_address) values('');
資料庫表結果為
i_id c_address
1 null
修改address.hbm.xml為:
<hibernate-mapping package="cn.com.lough.model">
<class
name="Address"
table="address"
lazy="false"
>
<meta attribute="sync-DAO">true</meta>
<cache usage="read-write"/>
<id
name="IId"
type="integer"
column="i_id"
>
<generator class="native"/>
</id>
<property
name="C_Address"
column="c_address"
type="string"
not-null="false"
length="128"
insert="false"
/>
</hibernate-mapping>
再次運行程序,此時hibernate生成的sql語句為 insert into address() values();

⑷ 如何將Hibernate生成的SQL語句列印到日誌文件

1 操作
只需要在log4j.properties中加入以下兩行代碼即可
#輸出sql語句到日誌
log4j.logger.org.hibernate.SQL=debug

#將對應的參數佔位符?換成傳入的參數
log4j.logger.org.hibernate.type=trace

實驗效果:

2017-09-05 16:51:26 [DubboServerHandler-thread-1] DEBUG org.hibernate.SQL (104) -
select
cpsysparm0_.CODE as CODE65_0_,
cpsysparm0_.NAME as NAME65_0_,
cpsysparm0_.PARMVALUE as PARMVALUE65_0_,
cpsysparm0_.PARMDESC as PARMDESC65_0_,
cpsysparm0_.MODIFIABLE as MODIFIABLE65_0_,
cpsysparm0_.VIEWABLE as VIEWABLE65_0_,
cpsysparm0_.OPERUSER as OPERUSER65_0_,
cpsysparm0_.OPERTIME as OPERTIME65_0_
from
CP_SYSPARM cpsysparm0_
where
cpsysparm0_.CODE=?
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicBinder (83) - binding parameter [1] as [VARCHAR] - 012
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [當前場次 ] as column [NAME65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [1] as column [PARMVALUE65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (67) - Found [null] as column [PARMDESC65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [0] as column [MODIFIABLE65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [1] as column [VIEWABLE65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [init ] as column [OPERUSER65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [2011-11-23 10:06:47.0] as column [OPERTIME65_0_]

可以看到查詢的過程和結果都進行了輸出。

⑸ hibernate sql怎麼使用別名

項目環境:hibernate3.6.1 mysql5.7.3 驅動:mysql-connector-java-5.1.26
問題描述:項目是從一個sqlserver 資料庫翻轉到mysql資料庫上的。通過sql查詢,自動映射到對象上,但是總是報錯。奇怪的問題:sql列印出來放到資料庫客戶端上
可以正常執行結果。但是sql就是查詢不出來,報 Column 'account' not found. 這樣的錯。換過驅動,想過框架的調用方式,查詢資料的時候,發現有人
說用query.addEntity("","").list() 可以解決問題,未做驗證。因為不想花大力氣從框架上變動。用驅動源碼跟蹤,發現原來,驅動根本就不識別別名。在查詢
`userAccount`對應的值的時候,傳到驅動的columnName 竟然是 「account」,這也是很多人在網上說的,如果sqlQuey 遇到兩個表有同一個屬性名,查詢會
報錯的bug的原因所在!

代碼部分:

[java] view plain
SQLQuery query = createSQLQuery(orderSql, values);
long totalCount = countSqlResult(sql, values);
page.setTotalItems(totalCount);
setPageParameterToSqlQuery(query, page);
List result = query.setResultTransformer(Transformers.aliasToBean(cl)).list();
page.setResult(result);

平台輸出:

[sql] view plain
select
l.id,
userId,
u.account as `userAccount`,
ip,
ipAddr,
loginTime
from
t_loginlog l
left join
t_user u
on l.userId = u.id
where
1=1 limit ?

[java] view plain
[2015-01-30 14:27:29,031][ERROR][http-8080-1] (JDBCExceptionReporter.java:234) - Column 'account' not found.
2015-1-30 14:27:29 org.apache.catalina.core.StandardWrapperValve invoke
嚴重: Servlet.service() for servlet ishare threw exception
java.sql.SQLException: Column 'account' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1171)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5737)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:61)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234)
at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:505)
at org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:451)
at org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:348)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2533)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)
at com.coolsoul.framework.orm.hibernate.HibernateDao.findSqlPage(HibernateDao.java:90)
at com.coolsoul.ishare.loginLog.service.LoginLogService.findPageList(LoginLogService.java:54)
at com.coolsoul.ishare.loginLog.service.LoginLogService
FastClassByCGLIB
fb9ca761.invoke(<generated>)

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
at com.coolsoul.ishare.loginLog.service.LoginLogService
EnhancerByCGLIB
5ea6d36b.findPageList(<generated>)

at com.coolsoul.ishare.loginLog.controller.LoginLogController.queryList(LoginLogController.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation..invokeHandlerMethod(.java:426)
at org.springframework.web.servlet.mvc.annotation..handle(.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)

解救方法:
困擾了我很久 ,找了很多資料,問題很簡單,就是驅動不支持別名的問題,這里記錄下,為後來人造橋!!! 在連接mysql資料庫的時候添加 useOldAliasMetadataBehavior=true 這個參數!!!!