Вот мой метод контроллера:Repository не сохраняет данные Н2 в памяти дб
// CREATE A USER
@PostMapping("/register")
public String createUser(
@RequestBody User user
) {
if (userService.userExists(user)) {
return "User already exists";
}
userService.saveUser(user);
return "Good job!";
}
UserServiceBean
@Service
public class UserServiceBean {
private UserRepository userRepository;
@Autowired
public UserServiceBean(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User saveUser(User user) {
return userRepository.save(user);
}
public boolean userExists(User user) {
if (userRepository.findByUsername(user.getUsername()) == null) {
return false;
}
return true;
}
И мой репозиторий интерфейс: UserRepository
public interface UserRepository extends CrudRepository<User, Long> {
// TODO: 29.01.17 Create a query to find all todos for logged in user
@Query("select td from User u inner join u.toDoItems td where u = :user")
public Iterable<ToDoItem> findAllToDosForLoggedInUser(@Param("user") User user);
public User findByUsername(String username);
}
А вот мой Entity Пользователь (получатели и установщики опущен)
@Entity
@Table (name = "USERS")
public class User extends BaseEntity {
@Column(name = "USERNAME")
private String username;
// TODO: 28.01.17 Find a way to store hashed and salted pws in DB
@Column(name = "PASSWORD")
private String password;
@Column(name = "EMAIL")
private String email;
// user can have many ToDoItems
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<ToDoItem> toDoItems;
// JPA demands empty constructor
public User() {}
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
Когда я стреляю JSON в моем локальном хосте: 8080/регистрация:
{
"username":"ss",
"password":"mkyong.com",
"email":"[email protected]"
}
Я получаю ответ Отличная работа! поэтому он отлично работает. Но когда я проверяю свою БД на localhost: 8080/console, у нее просто есть тестовая таблица, и новый пользователь не добавляется.
У меня есть мой спящий режим настройки DDL в application.properties установлено:
# Console to H2 database to check data
spring.h2.console.enabled=true
spring.h2.console.path=/console
spring.jpa.hibernate.ddl-auto=create-drop
Итак, как я могу обновить свой код, который он создает таблицы пользователей и сохранить созданный пользователем в эту БД? Я собираюсь изменить свой db позже, просто используя H2, чтобы проверить, работают ли мои контроллеры нормально, но это не имеет значения.
EDIT: Вот мой RepositoryConfiguration.java:
@Configuration
@EnableAutoConfiguration
@EntityScan(basePackages = {"com.doublemc.domain"})
@EnableJpaRepositories(basePackages = {"com.doublemc.repositories"})
@EnableTransactionManagement
public class RepositoryConfiguration {
}
EDIT2: Когда я хочу, чтобы зарегистрировать один и тот же пользователь снова (используя тот же JSON), то это дает мне "Пользователь уже существует" resposne так что это уже в дБ ... Почему я не могу это увидеть? Может, у меня есть H2 где-то еще? Не в базовом/консольном или другом порту? Как я могу это проверить?
Менеджер транзакций не настроен автоматически, когда я использую Spring Boot с интерфейсом CrudRepository? Когда я добавил Transactional, как вы упомянули, он еще не заполнил H2 db. – doublemc
Можете ли вы изменить свой вопрос, чтобы обеспечить конфигурацию пружины, пожалуйста? –
Добавлено, это пустой класс с просто аннотациями - читайте где-то достаточно. – doublemc