2014-01-16 2 views
0

Таким образом, я вызываю метод сохранения моего репозитория.Почему hibernate JPA генерирует выбор вместо вставки?

//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, отборное генерируется. Что дает?

EDIT # 1

Это оракул DB. Идентификатор генерируется через Java, и я просто установить его так:

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

Можете ли вы добавить журналы? –

+0

Какая БД? Как генерируется первичный ключ, ...? – Henry

+0

Он вернет объект класса модели со значениями, включая идентификатор строки, если он создан в базе данных также –

ответ

0

Я понял это. Мне нужно было создать jpaTransactionManager и установить в нем свой entityManager. Затем мне нужно было обернуть jpaTransactionManager в TransactionProxyFactoryBean. Затем мне нужно было создать компонент StoreService в xml в качестве прокси-сервера для TransactionProxyFactoryBean. После этого все вызовы для сохранения прошли транзакцию.

Короче говоря, я не использовал транзакции, когда ранее пытался сохранить их в базе данных.

0

Поскольку ваши Store идентификаторы присваиваются, таким образом, Hibernate не имеет ни малейшего представления, если данное id значение существует еще в базе данных.

Так, по умолчанию он проверяет (выполнитьSELECTзаявление) с базой данных, чтобы увидеть, если это Store уже существует в базе данных или нет, а затем огонь INSERT заявление.

+0

Я думаю, что вы правы в том, почему он делает выбор, но он не решает, почему он не вставляет. – user1099123

Смежные вопросы