2013-01-19 21 views
0

我剛剛在Heroku上開始使用Spring應用程序。直到現在一切似乎都工作得很好,但我不能添加任何東西到數據庫。我不確定是否需要在Heroku的WebInterface或我的配置文件中更改任何內容?Heroku上的SpringMVC不會持久化DataBase

我可以連接到我的數據庫,也是我的查詢工作(雖然沒有例外),但查詢的結果是空的。

如果我從服務中調用addBooking(),新的預訂將不會寫入數據庫(據我所知)。 getAvailableBookings()中的查詢沒有得到任何條目。

也許你將能夠找到任何錯誤或我錯過了什麼?

MyServiceImpl:

import java.util.Date; 
import java.util.logging.Logger; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.criteria.CriteriaQuery; 
import javax.persistence.criteria.Root; 

import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 
import org.stuttgart.fahrrad.controller.BookingController; 
import org.stuttgart.fahrrad.model.Booking; 

import com.example.model.Person; 

@Service 
public class BookingServiceImpl implements BookingService { 

    static Logger logger = Logger.getLogger(BookingServiceImpl.class.getName()); 

    @PersistenceContext 
    EntityManager em; 

    @Override 
    public void addBooking(Booking booking) { 

     logger.info("Persisting a booking to the DB!"); 

     em.persist(booking); 
    } 

    @Override 
    @Transactional 
    public int getAvailableBookings(Date bookingDay) { 
     CriteriaQuery<Booking> c = em.getCriteriaBuilder().createQuery(Booking.class); 
     Root<Booking> from = c.from(Booking.class); 
     return em.createQuery(c).getResultList().size(); 
    } 

我的applicationContext:

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

    <context:annotation-config /> 
    <context:component-scan base-package="org.stuttgart.fahrrad" /> 

    <mvc:annotation-driven/> 

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

    <tx:annotation-driven /> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
     <property name="dataSource" ref="dataSource"/> 

    </bean> 

    <beans profile="default"> 
     <jdbc:embedded-database id="dataSource"/>   
     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
      <property name="dataSource" ref="dataSource"/> 
      <property name="jpaVendorAdapter"> 
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
      </property> 
      <property name="jpaProperties"> 
       <props> 
        <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
        <prop key="hibernate.hbm2ddl.auto">create</prop> 
       </props> 
      </property> 
     </bean> 
    </beans> 

    <beans profile="prod"> 
     <bean class="java.net.URI" id="dbUrl"> 
      <constructor-arg value="#{systemEnvironment['DATABASE_URL']}"/> 
     </bean> 

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
      <property name="url" value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + @dbUrl.getPath() }"/> 
      <property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }"/> 
      <property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }"/> 
     </bean> 

     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
      <property name="dataSource" ref="dataSource"/> 
      <property name="jpaVendorAdapter"> 
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
      </property> 
      <property name="jpaProperties"> 
       <props> 
        <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
        <prop key="hibernate.show_sql">true</prop> 
        <!-- change this to 'verify' before running as a production app --> 
        <prop key="hibernate.hbm2ddl.auto">update</prop> 
       </props> 
      </property> 
     </bean> 
    </beans> 

</beans> 
+1

您沒有將'@ Transactional'應用於您的方法(addBooking)。 –

+0

@BorisTreukhov哦,我的......這個固定的......我怎麼可能是這個盲人?謝謝你,萬億次! – Robin

+0

@BorisTreukhov我很樂意接受這個答案。請隨時將其添加爲常規答案。 – Robin

回答

1

您不必應用到你的addBooking方法@Transactional