session.connection() 已弃用
Posted
技术标签:
【中文标题】session.connection() 已弃用【英文标题】:session.connection( ) deprecated 【发布时间】:2012-10-11 14:25:46 【问题描述】:我们最近搬到了休眠 4。我们的应用程序有许多文件,其中包含已弃用的 session.connection ()。我已经通过这样的调用替换为 session.doWork() :
session.doWork(new Work()
@Override
public void execute(Connection conn) throws SQLException
wasAuto = conn.getAutoCommit();
if(!wasAuto)
conn.rollback(); // in case there is existing transaction
conn.setAutoCommit(true);
);
try
return mainCallback.doInHibernate(session);
finally
session.doWork(new Work()
@Override
public void execute(Connection conn) throws SQLException
if(!wasAuto)
conn.setAutoCommit(wasAuto);
);
但正如我所说,我们有许多文件有相同的错误。像上面这样写是不是一个最佳实践。
为了更好地理解,我添加了一个有错误的文件。谁能帮我清除错误。
Session session = repo.getSessionFactory().openSession();
Connection connection = null;
PreparedStatement ps = null;
int recordCount = 0;
try
connection = session.connection();
ps = connection.prepareStatement(masterSql);
ps.setDate(1,acctPeriod);
ps.setLong(2,geoScheme.getId());
recordCount = ps.executeUpdate();
long millis = System.currentTimeMillis() - start;
logger.info("END --> Generating/Running Dynamic SQL for Aggregation took "+(millis / 60000.0)+" min" );
run.addRollupMessage("Generating/Running Dynamic SQL for Aggregation took "+(millis / 60000.0)+" min" );
run.setEndDate(DateUtils.currentTimestamp());
logger.info("No of Loan groups inserted = " + recordCount);
run.addRollupMessage("No of Loan groups inserted = " + recordCount);
catch (Exception err)
throw new RuntimeException(" **ERROR** DURING AGGREGATION: " + err.getMessage(),err);
finally
if (ps != null) ps.close();
if (connection != null) connection.close();
if (session != null) session.close();
【问题讨论】:
【参考方案1】:在我看来,您正在通过普通 JDBC 进行报告,我认为仅将代码移植到 Work 接口没有问题。事实上,Work 接口更好,因为它看起来会关闭连接并在抛出 SQL 异常时做正确的事情,所以你的代码应该更简单。
【讨论】:
你能详细说明一下吗..如果你能在 session.connection() 地方提供一些代码来替换,将不胜感激。 你能详细说明一下吗..如果你能在 session.connection() 地方提供一些代码来替换,将不胜感激。【参考方案2】:为什么不用spring框架和它的sessionFactory组件,我记得一旦你初始化整个工厂,你可以session.getCurrentSession()
,它会自动检测存在的会话或创建一个新的会话。
没有更多的手动 jdbc 代码。玩得开心!
【讨论】:
【参考方案3】:任何你不能使用这种方法的原因
SQLQuery query = session.createSQLQuery(sql);
query.setDate(1, acctPeriod);
query.setDate(2, geoScheme.getId());
recordCount = query.executeUpdate();
比匿名类等简单得多。这将遵循您在会话中使用的任何事务边界/自动提交(无论您每次显式打开一个新会话,还是使用 spring 来管理,等等...)。
【讨论】:
以上是关于session.connection() 已弃用的主要内容,如果未能解决你的问题,请参考以下文章
已弃用:each() 函数已弃用。 C:\xampp\apps\magento\htdocs\vendor\colinmollenhour\cache-backend-file\File.php 第