存储库不会将数据保存到H2内存数据库

时间:2017-01-31 10:16:04

标签: java hibernate spring-boot spring-data-jpa h2

这是我的控制器方法:

// 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?不在基本/控制台或不同的端口?我怎么检查这个?

2 个答案:

答案 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会为我自动配置它,但显然它没有。