Java 爪哇及;Hibernate-使用接口时的会话管理
我有一个问题与以下代码,请我需要帮助。 在服务层,在使用Hibernate时,我使用注释来管理会话,这非常有效Java 爪哇及;Hibernate-使用接口时的会话管理,java,spring,hibernate,inheritance,Java,Spring,Hibernate,Inheritance,我有一个问题与以下代码,请我需要帮助。 在服务层,在使用Hibernate时,我使用注释来管理会话,这非常有效 @Override @Transactional public Response delete(Integer id) throws Exception { Response response = new Response(); try { response.setData(videoDao.delete(id)); } catch (Excep
@Override
@Transactional
public Response delete(Integer id) throws Exception {
Response response = new Response();
try {
response.setData(videoDao.delete(id));
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
在DAO层中调用以下方法的
@Override
public boolean delete(int id) throws Exception {
String query = "UPDATE " + this.entity +
" SET remove_date = '" + String.valueOf(new Date(0)) + "'" +
" WHERE id = " + id;
Query q = sessionFactory.getCurrentSession().createQuery(query);
return q.executeUpdate() > 0 ? true : false;
}
其中,videoDao是实现接口的实体的Dao层。到目前为止还不错
问题是当我在videoDao中有另一个方法时,它不在我正在实现的接口中,在这种情况下,注释不起作用,但我不知道如何在服务层管理sessionFactory。我认为我在使用接口中的方法时没有问题,因为Spring正在注入IStance,其中包括sessionFactory,但是如果我手动进行注入(因为我不能使用注入的对象,因为它是接口,而不是具有此方法的真实类),sessionFactory始终为空
public interface IDao {
public boolean delete(int id) throws Exception;
}
这就是我在服务层中使用接口定义dao的方式:
@Autowired
IDao videoDao;
为了总结我对您所寻找的内容的理解,您希望让Spring代理在类中定义的方法,而不是在该类实现的接口中定义的方法 根据上述假设,您观察到的行为符合Spring AOP代理生成 Spring AOP代理生成默认情况下使用:
proxy target class=true
或proxyTargetClass
属性来实现。在这个Spring中,AOP代理类中定义的方法,而不是查看接口,我想这就是您要寻找的
正如您已经指出的,要使其工作,我们需要在代码中使用/注入类,而不是接口,尽管这不是最佳实践
有关此主题的更多信息,请访问
及
您能给出一个导致空sessionFactory的代码示例吗?@Faabass由于您是自动连接
IDao videoDao
,您如何调用接口中未指定的另一个方法
?什么是“注释不起作用”?请发布videoDAO类的代码,并使用非继承的方法,该方法应该是非继承的working@MadhusudanaReddy Sunnapu是的,我知道这听起来很愚蠢,但我认为它的工作方式是替换类的接口,但我想这种更改将违背最佳实践。我有一些想法,比如IDao videoDao=new videoDao();但是videoDao拥有的方法是IDao的方法,而不是IDao的方法VideoDao@Faabass你是对的,这将违背最佳实践。不管怎样,请在下面找到我的答案,看看这是否对你的问题有帮助。