發表於 程式分享

hibernate 5 無法在mssql 2012使用select top ?以取得前幾筆資料之解法

使用
Query query = getSession().createQuery(" FROM WABlog c Order By id desc");
query.setMaxResults(iLastRecord);
query.setFirstResult(0);

執行後均會失敗,出現"org.hibernate.exception.SQLGrammarException: could not extract ResultSet."

終於找到的解法是在applicationContext.xml (我是用spring)

<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
改為
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2012Dialect</prop>

若不是使用spring,調整hibernate.cfg.xml的設定
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
改為
<property name="dialect">org.hibernate.dialect.SQLServer2012Dialect</property>

應該也能work…

發表於 程式分享

log4j 2 設定依類別名稱存檔

1.程式內寫法依

(1) import log4j class
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

(2) 初始化logger
public class MyClass {
protected Logger logger = LogManager.getLogger(this.getClass().getName());

protected MyClass() {
ThreadContext.put(“className", this.getClass().getName());
}
}
(3) 使用方法同一般寫法logger.info(…)、logger.debug(…)…等

2.Loggers (設定appender-ref)
=> Appenders/Async(設定appender-ref)
=> Appenders/Routing/Routes的pattern使用$${ctx:className}以對應到程式中ThreadContext.put(“className", this.getClass().getName());
=> Appenders/Routing/Routes/Route/RollingFile的name、fileName、filePattern內的設定均使用${ctx:className}代表log的名稱

1[1].gif