private void addTeams()
{
++t;
Team team = new Team();
team.setName("Name " + Integer.toString(t));
Player p = new Player();
p.setAge(10 + t);
p.setDescription("Opis gracza nr " + Integer.toString(t));
p.setNick("Nick " + Integer.toString(t));
team.getPlayers().add(p);
teamsService.addTeam(team);
//playersService.addPlayer(p);
}
Tym próbuję cały czas, korzystałem trochę z Spring w Praktyce oraz Spring w Akcji, więc mam stamtąd config i całe dao. Niżej wrzucę linki, może w tym jest coś nie tak.
I faktycznie, nie otwieram nigdzie sesji, ale jak działam na encji, która nie ma żadnych powiązań z innymi klasami to tam wszystko śmiga ładnie.
Dao:
package eniupage.domain.repository.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import javax.inject.Inject;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;
import eniupage.domain.repository.Dao;
public abstract class DaoImpl<T> implements Dao<T>
{
@Inject
private SessionFactory sessionFactory;
private Class<T> domainClass;
protected Session currentSession()
{
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
private Class<T> getDomainClass()
{
if (domainClass == null)
{
ParameterizedType thisType = (ParameterizedType) getClass().getGenericSuperclass();
this.domainClass = (Class<T>) thisType.getActualTypeArguments()[0];
}
return domainClass;
}
private String getDomainClassName()
{
return getDomainClass().getName();
}
@Transactional
public void add(T t)
{
currentSession().save(t);
}
@Transactional
@SuppressWarnings("unchecked")
public List<T> getAll()
{
return currentSession().createQuery("from " + getDomainClassName()).list();
}
@Transactional
@SuppressWarnings("unchecked")
public T get(Serializable id)
{
return (T) currentSession().get(getDomainClass(), id);
}
@Transactional
public void update(T t)
{
currentSession().update(t);
}
@Transactional
@SuppressWarnings("unchecked")
public T load(Serializable id)
{
return (T) currentSession().load(getDomainClass(), id);
}
@Transactional
public long count()
{
return (Long) currentSession().createQuery("select count(*) from " + getDomainClassName()).uniqueResult();
}
}
i config
package eniupage.cfg;
import java.util.Properties;
import javax.sql.DataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan(basePackages = { "eniupage" }, excludeFilters = {
@Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
@EnableTransactionManagement
public class RootConfig
{
@Bean
public DataSource dataSource()
{
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName( "com.mysql.jdbc.Driver" );
dataSource.setUrl( "jdbc:mysql://localhost:3306/eniupage" );
dataSource.setUsername( "eniupage" );
dataSource.setPassword( "password" );
return dataSource;
}
@Autowired
@Bean
public LocalSessionFactoryBean sessionFactory( DataSource dataSource )
{
LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
sfb.setDataSource( dataSource );
sfb.setPackagesToScan( new String[] { "eniupage.domain"} );
Properties props = new Properties();
props.setProperty( "hibernate.dialect", "org.hibernate.dialect.MySQLDialect" );
props.setProperty( "hibernate.hbm2ddl.auto", "create-drop" );
sfb.setHibernateProperties( props );
return sfb;
}
@Bean
public BeanPostProcessor persistenceTranslation()
{
return new PersistenceExceptionTranslationPostProcessor();
}
@Autowired
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager(
SessionFactory sessionFactory) {
HibernateTransactionManager transactionManager = new HibernateTransactionManager(
sessionFactory);
return transactionManager;
}
}