Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 使用Spring数据JPA提交事务_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 使用Spring数据JPA提交事务

Java 使用Spring数据JPA提交事务,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我从这里下载了一个SpringDataJPA示例,它按预期工作 @SpringBootApplication public class Application { private static final Logger log = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class

我从这里下载了一个SpringDataJPA示例,它按预期工作

@SpringBootApplication
public class Application {

  private static final Logger log = LoggerFactory.getLogger(Application.class);

  public static void main(String[] args) {
    SpringApplication.run(Application.class);
  }

  @Bean
  public CommandLineRunner demo(CustomerRepository repository) {
    return (args) -> {
      // save a couple of customers
      repository.save(new Customer("Jack", "Bauer"));
      repository.save(new Customer("Chloe", "O'Brian"));
      repository.save(new Customer("Kim", "Bauer"));
      repository.save(new Customer("David", "Palmer"));
      repository.save(new Customer("Michelle", "Dessler"));

      // fetch all customers
      log.info("Customers found with findAll():");
      log.info("-------------------------------");
      for (Customer customer : repository.findAll()) {
        log.info(customer.toString());
      }
      log.info("");

      // fetch an individual customer by ID
      Customer customer = repository.findOne(1L);
      log.info("Customer found with findOne(1L):");
      log.info("--------------------------------");
      log.info(customer.toString());
      log.info("");

      // fetch customers by last name
      log.info("Customer found with findByLastName('Bauer'):");
      log.info("--------------------------------------------");
      for (Customer bauer : repository.findByLastName("Bauer")) {
        log.info(bauer.toString());
      }
      log.info("");
    };
  }

}
然后,我尝试从内存数据库更改为真实数据库。为此,我在当前目录中添加了一个
application.properties
文件,其中只有一行:

spring.datasource.url=jdbc:h2:C:/users/semaphor/H2Database;DB_CLOSE_ON_EXIT=FALSE
现在,当我运行应用程序时,我可以看到在预期的目录中创建了数据库文件

现在,我希望看到客户存储在数据库中,并且在重新启动应用程序时仍然存在。因此,我删除了一些行,其中客户在开始时保存在数据库中,但他们没有使用
findAll()
进行侦听

我想这笔交易还没有完成,但我不知道该怎么做。简单地将注释
@enableTransactionManagement
添加到应用程序类,并将
@Transactional
添加到
demo()
方法不是解决方案


提交事务需要添加什么(如果这确实是问题所在)?

请参见问题下方M.Deinum的评论

添加

spring.jpa.hibernate.ddl-auto=update

对于
应用程序,properties
是解决方案。

请参见问题下方M.Deinum的评论

添加

spring.jpa.hibernate.ddl-auto=update

对于
应用程序。属性是解决方案。

检查数据库文件的创建时间,可能是在启动时重新创建。放置在那里时可能会忽略此“@Transactional”。您是否可以尝试将对存储库的调用外部化到另一个类中的方法中,并在该方法上注释“@Transactional”?使用H2 web控制台检查您的数据。根据KayKay的建议,您可能希望创建一个带有“@service”和“@Transactional”注释的外部服务,在其中插入“@Autowired”存储库。据我所知,“@Bean”批注没有任何事务功能。@Mr_Thorynque我检查了它,文件没有重新创建。检查DB文件的创建时间,可能它是在启动时重新创建的。放置在那里时可能会忽略此“@transactional”。您是否可以尝试将对存储库的调用外部化到另一个类中的方法中,并在该方法上注释“@Transactional”?使用H2 web控制台检查您的数据。根据KayKay的建议,您可能希望创建一个带有“@service”和“@Transactional”注释的外部服务,在其中插入“@Autowired”存储库。据我所知,“@Bean”注释没有任何事务功能。@Thorynque先生,我检查过了,文件没有重新创建。