为什么hibernate JPA会生成select而不是insert?

时间:2014-01-16 17:20:01

标签: java spring hibernate jpa

所以我调用了我的存储库的save方法。

//Store Controller
private StoreService;

Store s = new Store();
s.setName("some store");
storeService.createStore(s);

-

//StoreServiceImpl
private StoreRepository storeRepository;

public void createStore(Store s) {
    storeRepository.save(s);
}

当我查看hibernate日志时,会生成一个select。是什么给了什么?

编辑#1

这是oracle DB。 id是通过java生成的,我只是这样设置:

String id = RandomStringGenerator.generate();
s.setId(id);

2 个答案:

答案 0 :(得分:0)

因为分配了Store个ID,所以Hibernate不知道数据库中是否存在给定的id值。

因此,默认情况下,它会针对数据库检查(执行 SELECT 语句)以查看此Store是否已存在于数据库中,然后开火INSERT声明。

答案 1 :(得分:0)

我已经弄清楚了。我需要创建一个jpaTransactionManager并在其中设置我的entityManager。然后,我需要将jpaTransactionManager包装在TransactionProxyFactoryBean中。然后我需要在xml中创建我的StoreService bean作为TransactionProxyFactoryBean的代理。之后,所有保存的调用都经过了交易。

简而言之,当我尝试将事务保存到数据库时,我没有使用事务。