JackyNail 2015-12-14 07:35 采纳率: 0%
浏览 891

HibernateTemplate.get获取不到实体对象

1.项目使用的是springmvc+hibernate3注解的方式进行框架搭建的,在applicationContext.xml中配置了sessionFactory:
class="common.jdbc.JdbcTemplate">


其中JdbcTemplate是自己写的一个类,继承了HibernateTemplate类,添加使用sql查询的方法。
public class JdbcTemplate extends HibernateTemplate {
//查询返回一条数据
public Map queryData(String sql) {
Map map = new HashMap();
Session session = this.getSessionFactory().openSession();
List list = session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
if (list.size() > 0) {
map = list.get(0);

    }
    session.close();
    return map;
}
}

在一个dao中遇到这样的问题
YysXkFjlbEntity fj = new YysXkFjlbEntity();
fj = jdbcTemplate.get(YysXkFjlbEntity.class, yysXkFjlbEntity.getId());
使用get获取不到对象了,id测试是有值的。
大婶们,指点下

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 00:11
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Spring MVC + Hibernate3框架中,如果你尝试使用jdbcTemplate.get()方法来获取数据库中的实体对象,但没有得到预期的结果,可能有以下原因:

    1. 检查你的YysXkFjlbEntity类是否正确实现了org.springframework.data.repository.query.QueryByExampleExecutor<T>接口。如果它不正确实现这个接口,那么jdbcTemplate.get()将无法找到正确的对象。
    2. 确保你已经正确地注入了SessionFactoryDataSource到你的@Component@Service类上。如果没有这样做,你需要手动创建并注入它们。

    例如,如果你在@Component上定义了一个名为MyService的服务类,并且你想使用jdbcTemplate获取数据库中的实体对象,你应该这样写:

    @Service
    public class MyService {
        private final JdbcTemplate jdbcTemplate;
    
        @Autowired
        public MyService(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        public YysXkFjlbEntity get(int id) {
            QueryExample example = new QueryExample(YysXkFjlbEntity.class);
            example.id(id);
    
            return jdbcTemplate.query(example, new BeanPropertyRowMapper<>(YysXkFjlbEntity.class));
        }
    }
    

    在这个例子中,我们首先创建了一个QueryExample实例,然后设置它的id属性为你要查找的对象的ID。然后,我们在jdbcTemplate.query()方法中调用这个例子,并传递一个BeanPropertyRowMapper,以便将结果映射到你的实体类中。

    另外,请确保你的数据库表结构与你的实体类相匹配,并且你的实体类实现了正确的接口。如果你的实体类没有实现org.springframework.data.repository.query.QueryByExampleExecutor<T>接口,那么你需要修改你的实体类以适配这一点。

    评论

报告相同问题?