【问题标题】:spring boot database insert not working春季启动数据库插入不起作用
【发布时间】:2017-03-09 10:25:29
【问题描述】:

我在 xml 中的 spring boot 配置有问题我创建了这个配置:

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="showSql" value="true"/>
        <property name="generateDdl" value="false"/>
        <property name="database" value="ORACLE"/>
    </bean>
    <bean id="dataSource" primary="true" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:20300:test"/>
        <property name="username" value="test"/>
        <property name="password" value="test"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
     <bean id="entityManagerFactory" primary="true" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
        <!-- spring based scanning for entity classes-->
        <property name="packagesToScan" value="model.entity"/>
        <property name="persistenceUnitName" value="msPersistenceUnit" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"  />
    <bean id="controllerService"
        class="...impl.ControllerServiceImpl">
        <property name="entityManager" ref="entityManagerFactory" />
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
        <constructor-arg index="0" ref="entityManagerFactory" />
    </bean>

我有这样的java代码:

public void setEntityManager(final HibernateEntityManagerFactory entityManager) {
        final RepositoryFactorySupport factorySupport = new JpaRepositoryFactory(entityManager.createEntityManager());

        controlRepository = factorySupport.getRepository(ObjControlRepository.class);
}

当我使用 find 方法时没问题,但是当我进行保存时,没有异常但它的值不是插入。 感谢您的帮助。

[编辑] 为了保存我正在使用:

/**
 * The Interface ObjControlRepository.
 */
public interface ObjControlRepository extends CrudRepository<ObjControl, String> {

}

我正在调用这样的方法:

controlRepository.save(newValue);

【问题讨论】:

  • 可否添加用于插入的代码
  • 你在代码中使用@Transactional注解吗?
  • 不,我没有在我的代码中使用@Transactional 注释。
  • 日志说什么?
  • 2017-03-09 11:39:08.743 INFO 12644 --- [nio-8080-exec-1] c.o.a.b.c.impl.ControllerServiceImpl :保存

标签: java hibernate spring-boot spring-data-jpa


【解决方案1】:

您应该尝试将hibernate.hbm2ddl.auto 变量显式设置为auto。这将阻止您的应用程序在您启动应用程序时释放以前的数据。

You can learn more about the hibernate.hbm2ddl.auto variable here.

【讨论】:

    【解决方案2】:

    您应该使用事务并提交事务以保存实体。

    所以在你的服务层使用@Transactionl注解,像这样:

    @Transactional
    public class ControllerServiceImpl {
    ...
    }
    

    由于ControllerServiceImpl 已经在 spring 配置文件中声明为一个 bean,所以一旦你保存了一个实体,Spring 将负责提交事务。

    【讨论】:

    • 嗨,不幸的是,它没有任何改变。真诚的
    • @Pilou,您可能需要添加更多代码让我们了解问题出在哪里。您正在使用的@Transactional 的软件包是什么?
    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2017-04-28
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多