Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用GenericsDAO+;SpringMVC+;休眠错误_Java_Hibernate_Spring Mvc_Generics - Fatal编程技术网

Java 使用GenericsDAO+;SpringMVC+;休眠错误

Java 使用GenericsDAO+;SpringMVC+;休眠错误,java,hibernate,spring-mvc,generics,Java,Hibernate,Spring Mvc,Generics,我使用泛型与SpringMVC+Hibernate一起工作,但是,抛出了一个错误,我正在尝试解决它,但我不能,任何人都知道问题的原因。 这是我的密码: public interface GenericDAO <E, K> { public void save(E entity); public List<E> findAll(); public void update(E entity); public void delete(E entity); public E f

我使用泛型与SpringMVC+Hibernate一起工作,但是,抛出了一个错误,我正在尝试解决它,但我不能,任何人都知道问题的原因。 这是我的密码:

public interface GenericDAO <E, K> {

public void save(E entity);
public List<E> findAll();
public void update(E entity);
public void delete(E entity);
public E find(K key);
}

@Transactional
@Repository
public abstract class GenericDAOImpl<E, K extends Serializable> implements GenericDAO<E, K>{

@Autowired
private SessionFactory sessionFactory;

protected Class<? extends E> daoType;

public GenericDAOImpl() {
    Type type = getClass().getGenericSuperclass();
    ParameterizedType parameterizedType = (ParameterizedType) type;

}

protected Session currentSession(){
    return sessionFactory.getCurrentSession();
}

@Override
public void save(E entity) {
    currentSession().save(entity);
}

@SuppressWarnings("deprecation")
@Override
public List<E> findAll() {
    return currentSession().createCriteria(daoType).list();
}

@Override
public void update(E entity) {
    currentSession().saveOrUpdate(entity);
}

@Override
public void delete(E entity) {
    currentSession().delete(entity);
}

@Override
public E find(K key) {
    return (E)currentSession().get(daoType, key);
}
}


public interface GenericService <E, K>{

public void save(E entity);
public List<E> findAll();
public void update(E entity);
public void delete(E entity);
public E find(K key);
}

@Service
public abstract class GenericServiceImpl<E, K> implements GenericService<E, K> {

private GenericDAO<E, K> genericDAO;

public GenericServiceImpl() {
}

public GenericServiceImpl(GenericDAO<E, K> genericDAO){
    this.genericDAO = genericDAO;
}

@Override
@Transactional(propagation = Propagation.REQUIRED)
public void save(E entity) {
    genericDAO.save(entity);
}

@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
public List<E> findAll() {
    return genericDAO.findAll();
}

@Override
@Transactional
public void update(E entity) {
    genericDAO.update(entity);
}

@Override
@Transactional
public void delete(E entity) {
    genericDAO.delete(entity);
}

@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
public E find(K key){
    return genericDAO.find(key);
}
}

public interface MoviesDAO extends GenericDAO<Movies, Integer> {
}

@Transactional
@Repository
public class MoviesDAOImpl extends GenericDAOImpl<Movies, Integer> implements MoviesDAO{
}

public interface MoviesService extends GenericService<Movies, Integer>{
}

@Service
public class MoviesServiceImpl extends GenericServiceImpl<Movies, Integer> implements MoviesService{

 }

@Controller
public class MoviesController {

@Autowired(required = true)
MoviesService moviesService;

@RequestMapping("/movies")
public String returnMovies(Model model){
    model.addAttribute("movies", new Movies());
    model.addAttribute("listMovies", moviesService.find(1));
    return "movies";
}
}
context.xml

<tx:annotation-driven transaction-manager="transactionManager"/>
<mvc:annotation-driven/>    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/DataBaseBD" />
    <property name="username" value="user"/>
    <property name="password" value="password"/>
</bean> 

<bean id="hibernate5AnnotatedSessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.project.movies.model.Movies</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property> 
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="hibernate5AnnotatedSessionFactory" />
</bean> 

com.project.movies.model.movies
org.hibernate.dialogue.mysqldialogue
真的

如果您的服务为空,请使用您的完整限定名MoviesServiceImpl为您的服务添加bean定义

....
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/DataBaseBD" />
    <property name="username" value="user"/>
    <property name="password" value="password"/>
</bean> 

<bean id="moviesService" class="your.class.package.MoviesServiceImpl" parent="GenericService" />
....
。。。。
....

如果您的服务为空,请使用您的完整限定名MoviesServiceImpl为您的服务添加bean定义

....
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/DataBaseBD" />
    <property name="username" value="user"/>
    <property name="password" value="password"/>
</bean> 

<bean id="moviesService" class="your.class.package.MoviesServiceImpl" parent="GenericService" />
....
。。。。
....

你能显示你在哪里设置
会话工厂
bean的配置吗?我发布了我的上下文…你能显示你在哪里设置
会话工厂
bean的配置吗?我发布了我的上下文…我将此代码添加到MoviesServiceImpl,现在我有另一个错误:
@Autowired publicMoviesServiceImpl(MoviesDAO MoviesDAO){super(MoviesDAO);}
错误:org.hibernate.hibernate异常:无法获取当前线程的事务同步会话
@Entity@Table(name=“movies”)公共类电影{@Id@Column(name=“Id”)@GeneratedValue(strategy=GenerationType.IDENTITY)private int id;@Column(name=“name”)private String name;
我将此代码添加到MoviesServiceImpl,现在我有另一个错误:
@Autowired public MoviesServiceImpl(MoviesDAO MoviesDAO){super(MoviesDAO);}
错误:org.hibernate.hibernateeexception:无法获取当前线程的事务同步会话
@Entity@Table(name=“movies”)公共类电影{@Id@Column(name=“Id”)@GeneratedValue(strategy=GenerationType.IDENTITY)private int Id;@Column(name=“name”)private String name;