Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 HibernateeException:将实体保存到数据库时,未找到当前线程的会话_Java_Spring_Hibernate - Fatal编程技术网

Java HibernateeException:将实体保存到数据库时,未找到当前线程的会话

Java HibernateeException:将实体保存到数据库时,未找到当前线程的会话,java,spring,hibernate,Java,Spring,Hibernate,我正试图找出问题所在,但我无能为力 我只想使用Hibernate SessionFactory将实体保存到数据库中,但没有发现异常会话 Hibernate版本:4.1.9.Final Spring版本:3.2.4.0版本 这里是web.xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix">

我正试图找出问题所在,但我无能为力

我只想使用Hibernate SessionFactory将实体保存到数据库中,但没有发现异常会话

Hibernate版本:4.1.9.Final

Spring版本:3.2.4.0版本

这里是web.xml

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean> 

    <mvc:annotation-driven />
    <!-- <mvc:resources mapping="/resources/**" location="/resources/" cache-period="3600" /> -->

    <context:annotation-config />
    <context:component-scan base-package="com.example" /> <!-- controller -->

    <!-- Load Hibernate related configuration -->
    <import resource="hibernate-context2.xml" /> 
<context:property-placeholder location="/WEB-INF/db.properties" /> 

    <!-- Enable annotation style of managing transactions -->
 <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->
 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
     p:dataSource-ref="dataSource"
     p:configLocation="${hibernate.config}"
     p:packagesToScan="com.example.model"/>

 <!-- Declare a datasource that has pooling capabilities--> 
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close"
    p:driverClass="${app.jdbc.driverClassName}"
    p:jdbcUrl="${app.jdbc.url}"
    p:user="${app.jdbc.username}"
    p:password="${app.jdbc.password}"
    p:acquireIncrement="5"
    p:idleConnectionTestPeriod="60"
    p:maxPoolSize="100"
    p:maxStatements="50"
    p:minPoolSize="10" />

   <!-- Declare a transaction manager-->
   <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"
          p:sessionFactory-ref="sessionFactory" />
<hibernate-configuration>
  <session-factory>
   <!-- We're using MySQL database so the dialect needs to MySQL as well-->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    <!-- Enable this to see the SQL statements in the logs-->
    <property name="show_sql">true</property>
    <!-- This will drop our existing database and re-create a new one.
      Existing data will be deleted! -->
    <property name="hbm2ddl.auto">update</property>
  </session-factory>
</hibernate-configuration>
存储库类

# database properties
app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc:mysql://localhost/equation
app.jdbc.username=root
app.jdbc.password=12345

#hibernate properties
hibernate.config=/WEB-INF/hibernate.cfg.xml
@Repository
public class EquationRepository implements EquationDAO {

    private SessionFactory sessionFactory;

    @Autowired
    public EquationRepository(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

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

    @Override
    public void addEquation(Equation equation) {
        currentSession().save(equation);
    }
    @Service
public class EquationServiceImpl implements EquationService {

    private EquationRepository repository;

    @Autowired
    public void setRepository(EquationRepository repository) {
        this.repository = repository;
    }

    @Override
    public void equationCulc(EquationDto dto) {
        Equation equation = DTOTransfer(dto);
        double a = dto.getA();
        double b = dto.getB();
        double c = dto.getC();
        double D = (b*b) - 4 * a * c;

        if(D == 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
        } else if(D > 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
            equation.setX2((-b - Math.sqrt(D)) / (2 * a));
        }

        repository.addEquation(equation);
    }
@Controller()
public class HomeController {

    @Autowired 
    private EquationService equationService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String showHome(Model model) {
        model.addAttribute("equation", new EquationDto());
        return "index";
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String equationForm(@ModelAttribute("equation") EquationDto equationDto) {

        equationService.equationCulc(equationDto);

        return "redirect:/examples";
    }
}
服务等级

# database properties
app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc:mysql://localhost/equation
app.jdbc.username=root
app.jdbc.password=12345

#hibernate properties
hibernate.config=/WEB-INF/hibernate.cfg.xml
@Repository
public class EquationRepository implements EquationDAO {

    private SessionFactory sessionFactory;

    @Autowired
    public EquationRepository(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

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

    @Override
    public void addEquation(Equation equation) {
        currentSession().save(equation);
    }
    @Service
public class EquationServiceImpl implements EquationService {

    private EquationRepository repository;

    @Autowired
    public void setRepository(EquationRepository repository) {
        this.repository = repository;
    }

    @Override
    public void equationCulc(EquationDto dto) {
        Equation equation = DTOTransfer(dto);
        double a = dto.getA();
        double b = dto.getB();
        double c = dto.getC();
        double D = (b*b) - 4 * a * c;

        if(D == 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
        } else if(D > 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
            equation.setX2((-b - Math.sqrt(D)) / (2 * a));
        }

        repository.addEquation(equation);
    }
@Controller()
public class HomeController {

    @Autowired 
    private EquationService equationService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String showHome(Model model) {
        model.addAttribute("equation", new EquationDto());
        return "index";
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String equationForm(@ModelAttribute("equation") EquationDto equationDto) {

        equationService.equationCulc(equationDto);

        return "redirect:/examples";
    }
}
控制器类

# database properties
app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc:mysql://localhost/equation
app.jdbc.username=root
app.jdbc.password=12345

#hibernate properties
hibernate.config=/WEB-INF/hibernate.cfg.xml
@Repository
public class EquationRepository implements EquationDAO {

    private SessionFactory sessionFactory;

    @Autowired
    public EquationRepository(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

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

    @Override
    public void addEquation(Equation equation) {
        currentSession().save(equation);
    }
    @Service
public class EquationServiceImpl implements EquationService {

    private EquationRepository repository;

    @Autowired
    public void setRepository(EquationRepository repository) {
        this.repository = repository;
    }

    @Override
    public void equationCulc(EquationDto dto) {
        Equation equation = DTOTransfer(dto);
        double a = dto.getA();
        double b = dto.getB();
        double c = dto.getC();
        double D = (b*b) - 4 * a * c;

        if(D == 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
        } else if(D > 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
            equation.setX2((-b - Math.sqrt(D)) / (2 * a));
        }

        repository.addEquation(equation);
    }
@Controller()
public class HomeController {

    @Autowired 
    private EquationService equationService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String showHome(Model model) {
        model.addAttribute("equation", new EquationDto());
        return "index";
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String equationForm(@ModelAttribute("equation") EquationDto equationDto) {

        equationService.equationCulc(equationDto);

        return "redirect:/examples";
    }
}
我对这东西不熟悉。尤其是使用这个旧版本和xml配置。请原谅我这个愚蠢的名字:)


如果我忘了什么,请告诉我

您正在尝试使用sessionFactory.getCurrentSession()获取现有会话。我认为不存在会话,因为您没有用@Transactional注释任何调用代码


尝试在EquationRepository类的addEquation()方法上添加@Transactional注释。

将@Transactional注释添加到服务层有帮助

@Service
public class EquationServiceImpl implements EquationService {

    private EquationRepository repository;

    @Autowired 
    public void setRepository(EquationRepository repository) {
        this.repository = repository; 
    }

    @Override
    @Transactional
    public void equationCulc(EquationDto dto) {
        Equation equation = DTOTransfer(dto);
        double a = dto.getA();
        double b = dto.getB();
        double c = dto.getC();
        double D = (b * b) - 4 * a * c;

        if (D == 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
        } else if (D > 0) {
            equation.setX1((-b + Math.sqrt(D)) / (2 * a));
            equation.setX2((-b - Math.sqrt(D)) / (2 * a));
        }

        repository.addEquation(equation);
    }