这是我的控制器方法:
// 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);
}
这是我的用户实体(无效的getter和setter)
@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;
}
当我在我的localhost拍摄JSON时:8080 /注册:
{
"username":"ss",
"password":"mkyong.com",
"email":"asdasd@wp.pl"
}
我得到回复干得好!所以它运作正常。但是当我在localhost:8080 / console上检查我的数据库时,它只有测试表并且没有添加新的用户。
我在application.properties设置中设置了hibernate ddl:
# Console to H2 database to check data
spring.h2.console.enabled=true
spring.h2.console.path=/console
spring.jpa.hibernate.ddl-auto=create-drop
那么,如何更新我创建表USERS的代码并将创建的用户保存到该数据库中?我稍后会更改我的数据库,只需使用H2来检查我的控制器是否工作正常,但这不重要。
编辑: 这是我的 RepositoryConfiguration.java :
@Configuration
@EnableAutoConfiguration
@EntityScan(basePackages = {"com.doublemc.domain"})
@EnableJpaRepositories(basePackages = {"com.doublemc.repositories"})
@EnableTransactionManagement
public class RepositoryConfiguration {
}
EDIT2: 当我想再次注册同一个用户(使用相同的JSON)时,它会给我&#34;用户已经存在&#34; resposne所以它已经在数据库中......为什么我不能看到呢?也许我在其他地方得到了H2?不在基本/控制台或不同的端口?我怎么检查这个?
答案 0 :(得分:0)
我认为您错过了服务的交易部分。您是否在春季环境中定义了一个事务管理器?
如果是这样,您需要将注释@Transactional
添加到您的服务中。例如:
@Service
public class UserServiceBean {
@Transactional
public User saveUser(User user) {
return userRepository.save(user);
}
}
答案 1 :(得分:0)
我不得不补充道:
spring.datasource.url=jdbc:h2:~/test
spring.datasource.driver-class-name=org.h2.Driver
到application.properties,现在效果很好。我以为我不需要它,因为Spring会为我自动配置它,但显然它没有。