Hibernate 如何从doWork()方法获取返回
这是我下面给出的dowork代码,我无法获取返回计数是否有任何方法可以从该方法获取返回,doreturnwork对此不起作用请帮助我,我正在尝试,但没有类似doreturnwork的方法请帮助Hibernate 如何从doWork()方法获取返回,hibernate,Hibernate,这是我下面给出的dowork代码,我无法获取返回计数是否有任何方法可以从该方法获取返回,doreturnwork对此不起作用请帮助我,我正在尝试,但没有类似doreturnwork的方法请帮助 sessionFactory.getCurrentSession().doWork( new Work() { public void execute(Connection connection) throws S
sessionFactory.getCurrentSession().doWork(
new Work()
{
public void execute(Connection connection) throws SQLException
{
String contactQueryCounts = "";
String contactQueryIds = "";
int index = 1;
StringBuilder builder = new StringBuilder();
CustomerUser user = (CustomerUser) userService.getLoggedInUser();
String inClause = "";
for (Long id :ids ) {
builder.append("?,");
}
if(builder.length()>0){
inClause = builder.substring(0, builder.length()-1);
}
if(inClause.length()>0){
contactQueryCounts= "select count(id) from ( select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," +
"@company_id := company_id as dummy from salebuild_ctl.company_contact where id in ("+inClause+") " +
" order by company_id, date_created asc ) as x where x.row_number <= ?";
contactQueryIds= "select id from ( select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," +
"@company_id := company_id as dummy from salebuild_ctl.company_contact where id in ("+inClause+") " +
" order by company_id, date_created asc ) as x where x.row_number <= ?";
}else{
contactQueryCounts= "select count(id) from ( select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," +
"@company_id := company_id as dummy from salebuild_ctl.company_contact " +
" order by company_id, date_created asc ) as x where x.row_number <= ?";
contactQueryIds= "select id from ( select *,@num := if(@company_id = company_id, @num + 1, 1) as row_number," +
"@company_id := company_id as dummy from salebuild_ctl.company_contact " +
" order by company_id, date_created asc ) as x where x.row_number <= ?";
}
java.sql.PreparedStatement sCount;
java.sql.PreparedStatement sIds;
try {
sCount = connection.prepareStatement(contactQueryCounts);
sIds = connection.prepareStatement(contactQueryIds);
for(Long id : ids){
sCount.setLong(index, id);
sIds.setLong(index, id);
index=index+1;
}
sCount.setInt(index,user.getAccount().getCurrentSubscription().getNumberofcontactspercompany());
sIds.setInt(index,user.getAccount().getCurrentSubscription().getNumberofcontactspercompany());
ResultSet rs = sCount.executeQuery();
int c = rs.getInt(1);
String contactLevelCountsQuery="select c.name,count(a.id) from company_contact a left join " +
"title b on a.corporate_title_id=b.id left join title_level c on b.title_level_id=c.id where a.id in" +
" ("+sIds.toString()+") and c.name is not null group by c.name";
java.sql.Statement s = connection.createStatement();
ResultSet rsIds = s.executeQuery(contactLevelCountsQuery);
SearchService.levelToContactCount.clear();
while (rsIds.next()) {
if(rsIds.getString(1) == null){
SearchService.levelToContactCount.put("No Level",rsIds.getInt(2));
}else{
SearchService.levelToContactCount.put(rsIds.getString(1),rsIds.getInt(2));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
);
初始化空集合或持有者对象,并在工作实例中填充此集合或持有者:
public List<Foo> searchFoos() {
final List<Foo> result = new ArrayList<Foo>();
sessionFactory.getCurrentSession().doWork(new Work() {
public void execute(Connection connection) throws SQLException {
// do some work
result.add(foo1);
// do some work
result.add(foo2);
}
});
return result;
}
可能您想使用另一种在Hibernate中调用的方法。也许您可以从Hibernate4查看,也可以使用session.doReturningWorkReturningWork,如下所示
ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() {
@Override
public Long execute(Connection connection) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement("select max(salary) from employee");
resultSet = preparedStatement.executeQuery();
resultSet.next();
return resultSet.getLong(1);
}catch (SQLException e) {
throw e;
} finally {
if(preparedStatement != null) {
preparedStatement.close();
}
if(resultSet != null) {
resultSet.close();
}
}
}
};
Long maxRecord = getSession().doReturningWork(maxReturningWork);
我在描述中提到doReturingWork在我的版本中不起作用。很好的解释
ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() {
@Override
public Long execute(Connection connection) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement("select max(salary) from employee");
resultSet = preparedStatement.executeQuery();
resultSet.next();
return resultSet.getLong(1);
}catch (SQLException e) {
throw e;
} finally {
if(preparedStatement != null) {
preparedStatement.close();
}
if(resultSet != null) {
resultSet.close();
}
}
}
};
Long maxRecord = getSession().doReturningWork(maxReturningWork);