我知道可以通过invoke来调用想使用的方法。
我想问一下,可以读取一个正在运行时的类的属性吗?例如hibernate框架,我使用它在进行查找,它执行到了Loader.class的getOptionalObjectKey这个方法。
我可不可以通过反射来获得optionalObject的值?
private static EntityKey getOptionalObjectKey(QueryParameters queryParameters, SessionImplementor session)
{
Object optionalObject = queryParameters.getOptionalObject();
Serializable optionalId = queryParameters.getOptionalId();
String optionalEntityName = queryParameters.getOptionalEntityName();
if(optionalObject != null && optionalEntityName != null)
return new EntityKey(optionalId, session.getEntityPersister(optionalEntityName, optionalObject), session.getEntityMode());
else
return null;
}
我想问一下,可以读取一个正在运行时的类的属性吗?例如hibernate框架,我使用它在进行查找,它执行到了Loader.class的getOptionalObjectKey这个方法。
我可不可以通过反射来获得optionalObject的值?
private static EntityKey getOptionalObjectKey(QueryParameters queryParameters, SessionImplementor session)
{
Object optionalObject = queryParameters.getOptionalObject();
Serializable optionalId = queryParameters.getOptionalId();
String optionalEntityName = queryParameters.getOptionalEntityName();
if(optionalObject != null && optionalEntityName != null)
return new EntityKey(optionalId, session.getEntityPersister(optionalEntityName, optionalObject), session.getEntityMode());
else
return null;
}
解决方案 »
- 这是哪儿出错了啊?急!
- 关于JSP session的作用范围
- 关于在action中跳转问题
- 开源的软件和操作系统是如何修改的?
- 请教一个hibernate查询分页问题,级联问题,郁闷了很长时间了
- Hibernate的一个问题
- JDBC commit failed / Connection reset
- 选择哪款内存比较好!
- 我的WEB应用本来放在 /resin/webapps/下面一点问题都没有,但现在放在/resin/doc/下面了 就找不到标签了?
- [注意]100分求购5月31日前在SUN社区注册的用户帐号!!!
- hibernate如何打印所执行的【原版SQL】语句?
- 我的MyEclipse8.5.0配置不了Tomcat6.0,求解释
就如你上面那个方法一样,在return的时候才构造的EntityKey这个对象,那么之前EntityKey也都是null。获取来能有什么意义呢?
例如这篇文章:
“想看Hibernate生成的SQL语句?”
http://rmn190.iteye.com/blog/254885
中的这段代码
protected final PreparedStatement prepareQueryStatement(QueryParameters queryParameters, boolean scroll, SessionImplementor session)
throws SQLException, HibernateException
{
queryParameters.processFilters(getSQLString(), session);
String sql = queryParameters.getFilteredSQL();
Dialect dialect = getFactory().getDialect();
RowSelection selection = queryParameters.getRowSelection();
boolean useLimit = useLimit(selection, dialect);
boolean hasFirstRow = getFirstRow(selection) > 0;
boolean useOffset = hasFirstRow && useLimit && dialect.supportsLimitOffset();
boolean callable = queryParameters.isCallable();
boolean useScrollableResultSetToSkip = hasFirstRow && !useOffset && getFactory().getSettings().isScrollableResultSetsEnabled();
ScrollMode scrollMode = scroll ? queryParameters.getScrollMode() : ScrollMode.SCROLL_INSENSITIVE;
if(useLimit)
sql = dialect.getLimitString(sql.trim(), useOffset ? getFirstRow(selection) : 0, getMaxOrLimit(selection, dialect));
sql = preprocessSQL(sql, queryParameters, dialect);
PreparedStatement st = null;
if(callable)
st = session.getBatcher().prepareCallableQueryStatement(sql, scroll || useScrollableResultSetToSkip, scrollMode);
else
st = session.getBatcher().prepareQueryStatement(sql, scroll || useScrollableResultSetToSkip, scrollMode);
try
他说的好像就是利用断点来监测数据,不过我设置了断点到那的时候没有数据。显示 sql cannot be resolved。
只是好奇这种方法。虽然得到的仍然不是原版的sql语句,不过我觉得这种方法很好用。