2015-05-24 8 views
0

applicationContext.mlОшибка с Hibernate SessionFactory

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx/spring-tx-4.0.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.url}" 
     p:username="${jdbc.username}" 
     p:password="${jdbc.password}"/> 

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="/WEB-INF/jdbc.properties" /> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses"> 
     <list> 
      <value>it.davidefruci.casadiscografica2.beans.Album</value> 
      <value>it.davidefruci.casadiscografica2.beans.Artist</value> 
      <value>it.davidefruci.casadiscografica2.beans.Song</value> 
      <value>it.davidefruci.casadiscografica2.beans.RecordCompany</value> 
      <value>it.davidefruci.casadiscografica2.beans.Category</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
</bean> 

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

<!-- DAO --> 
<bean id="albumDao" class="it.davidefruci.casadiscografica2.daoImpl.AlbumDaoImpl"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<bean id="artistDao" class="it.davidefruci.casadiscografica2.daoImpl.ArtistDaoImpl"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<bean id="categoryDao" class="it.davidefruci.casadiscografica2.daoImpl.CategoryDaoImpl"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<bean id="recordCompanyDao" class="it.davidefruci.casadiscografica2.daoImpl.RecordCompanyDaoImpl"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<bean id="songDao" class="it.davidefruci.casadiscografica2.daoImpl.SongDaoImpl"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<!-- BO --> 
<bean id="albumBo" class="it.davidefruci.casadiscografica2.boImpl.AlbumBoImpl"> 
    <property name="albumDao" ref="albumDao"></property> 
</bean> 

<bean id="artistBo" class="it.davidefruci.casadiscografica2.boImpl.ArtistBoImpl"> 
    <property name="artistDao" ref="artistDao"></property> 
</bean> 

<bean id="categoryBo" class="it.davidefruci.casadiscografica2.boImpl.CategoryBoImpl"> 
    <property name="categoryDao" ref="categoryDao"></property> 
</bean> 

<bean id="recordCompanyBo" class="it.davidefruci.casadiscografica2.boImpl.RecordCompanyBoImpl"> 
    <property name="recordCompanyDao" ref="recordCompanyDao"></property> 
</bean> 

<bean id="songBo" class="it.davidefruci.casadiscografica2.boImpl.SongBoImpl"> 
    <property name="songDao" ref="songDao"></property> 
</bean> 

AlbumDao пакет it.davidefruci.casadiscografica2.dao

public interface AlbumDao { 

public void save(Album album) throws Exception; 
public void delete(int id) throws Exception; 
public void update(Album album) throws Exception; 

public Album findById(int id) throws Exception; 
public Album findByName(String name) throws Exception; 

public List<Album> getAllAlbum() throws Exception; 

} 

AlbumDaoImpl пакет it.davidefruci.casadiscografica2.daoImpl;

public class AlbumDaoImpl implements AlbumDao { 

@Autowired 
@Qualifier("sessionFactory") 
SessionFactory sessionFactory; 

public SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 

public void setSessionFactory(SessionFactory factory) { 
    this.sessionFactory = factory; 
} 

@Override 
public void save(Album album) throws Exception { 
    Session session = sessionFactory.openSession(); 
    Transaction tx = null; 

    try { 
     tx = session.beginTransaction(); 
     session.saveOrUpdate(album); 
     tx.commit(); 
    } catch (HibernateException e) { 
     if (tx != null) { 
      tx.rollback(); 
     } else { 
      e.printStackTrace(); 
     } 
    } finally { 
     session.close(); 
    } 
} 

@Override 
public void delete(int id) throws Exception { 
    Session session = sessionFactory.openSession(); 
    Transaction tx = null; 

    try { 
     tx = session.beginTransaction(); 
     Album album = (Album) session.get(Album.class, id); 
     session.delete(album); 
     tx.commit(); 

    } catch (HibernateException e) { 
     if (tx != null) { 
      tx.rollback(); 
     } else { 
      e.printStackTrace(); 
     } 

    } finally { 
     session.close(); 
    } 
} 

@Override 
public void update(Album album) throws Exception { 
    Session session = sessionFactory.openSession(); 
    Transaction tx = null; 
    try { 
     tx = session.beginTransaction(); 
     session.saveOrUpdate(album); 
     tx.commit(); 

    } catch (HibernateException e) { 
     if (tx != null) { 
      tx.rollback(); 
     } 
     throw e; 
    } finally { 
     session.close(); 
    } 
} 

@Override 
public Album findById(int id) throws Exception { 
    Session session = sessionFactory.openSession(); 
    Album album = null; 
    try { 
     album = (Album) session.get(Album.class, id); 

    } catch (HibernateException e) { 
     throw e; 
    } finally { 
     session.close(); 
    } 
    return album; 
} 

@Override 
public Album findByName(String name) throws Exception { 
    Session session = sessionFactory.openSession(); 
    Album album = null; 
    List<Album> list = new ArrayList<Album>(); 

    try { 
     Query query = session.createQuery("FROM Album WHERE name= :name"); 
     query.setParameter("name", name); 
     list = query.list(); 
     if (list != null) { 
      if (list.size() == 1) { 
       album = list.get(0); 
      } 
     } 
    } catch (HibernateException e) { 
     throw e; 
    } finally { 
     session.close(); 
    } 
    return album; 
} 

@Override 
public List<Album> getAllAlbum() throws Exception { 
    Session session = sessionFactory.openSession(); 
    Transaction tx = null; 
    List<Album> list = null; 
    try { 
     list = session.createQuery("FROM Album").list(); 

    } catch (HibernateException e) { 
     throw e; 
    } finally { 
     session.close(); 
    } 
    return list; 
} 

} 

Tomcat не развертывает приложение. Это говорит

FAIL - Развернутые приложение с контекстом/CasaDiscografica2 но контекст не удалось запустить

и дать мне, что ошибки:

org.springframework.beans.factory.BeanCreationException : Ошибка создания bean-компонента с именем 'albumDao', определенным в ресурсе ServletContext [/WEB-INF/applicationContext.xml]: Ошибка значения свойств свойства; вложенное исключение org.springframework.beans.NotWritablePropertyException: Недопустимое свойство 'SessionFactory' класса боба

и

org.springframework.beans.NotWritablePropertyException: Недопустимое свойство 'SessionFactory' класса боба [его .davidefruci.casadiscografica2.daoImpl.AlbumDaoImpl]: Свойство bean 'sessionFactory' не доступно для записи или имеет неверный метод setter. Соответствует ли тип параметра сеттера типу возврата получателя?

Почему? Благодарю.

+0

использовать соответствующие соглашения об именах bean, изменить getFactory() на getSessionFactory() и setFactory() на setSessionFactory() и попробовать –

+0

Выполнено. Теперь он говорит мне -> org.springframework.beans.factory.CannotLoadBeanClassException: не удается найти класс [it.davidefruci.casadiscografica2.daoImpl.AlbumBoImpl] для bean-компонента с именем 'albumBo', определенным в ресурсе ServletContext [/ WEB-INF/applicationContext .xml]; вложенное исключение составляет java.lang.ClassNotFoundException: it.davidefruci.casadiscografica2.daoImpl.AlbumBoImpl --- Update: Конечно .. Я пишу it.davidefruci.casadiscografica2.daoImpl.AlbumBoImpl вместо it.davidefruci.casadiscografica2.boImpl.AlbumBoImpl ... Ouch – Dave

+0

Вы можете изменить свой вопрос с кодом альбома «AlbumBoImpl»? –

ответ

0

Если вы являетесь автолюбителем SessionFactory, вам также не нужно явно вводить его в свой контекст.

Не забудьте добавить <context:annotation-config /> в контекст вашего приложения, если вы хотите, чтобы автоустановка работала.

+0

Не могли бы вы быть более ясными? – Dave

+0

У вас есть аннотация @Autowire на фабрике сеансов. Это делает то же самое, что и код '" в вашем XML (контекст приложения). Вам не нужны оба, но вам нужно включить аннотации, как я объяснил. – Jeff

+0

Хорошо, спасибо! – Dave

Смежные вопросы