はここに私のコントローラのメソッドであるインメモリ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);
ここ}
そして、私のユーザエンティティ(ゲッターとセッターがommited)である
@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で自分のDBをチェックすると、Test Tableがあり、新しいUserは追加されません。私はセットapplication.propertiesに私の休止状態の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
をだから、どのように私はそれがテーブルのユーザを作成することを私のコードを更新し、そのDBに作成したユーザーを保存しますか?後で私のデータベースを変更するつもりです。コントローラを正常に動作させるかどうかをH2で確認するだけですが、ここでは問題にはなりません。 EDIT
:
は@Configuration
@EnableAutoConfiguration
@EntityScan(basePackages = {"com.doublemc.domain"})
@EnableJpaRepositories(basePackages = {"com.doublemc.repositories"})
@EnableTransactionManagement
public class RepositoryConfiguration {
}
EDIT2:ここに は私RepositoryConfiguration.javaである私は、再び同じユーザーを登録したい場合は (同じJSONを使用して)が、それは私を与えるresposneを "ユーザーはすでに存在しています"だから、すでにデータベースに入っています...なぜ私はそれを見ることができませんか?たぶん私はH2をどこか別に持っていますか?基本/コンソールまたは別のポートにはありませんか?これをどうすれば確認できますか?
CrudRepositoryインターフェイスでSpringブートを使用しているときにトランザクションマネージャが自動構成されていませんか?あなたが言及したように私はTransactionalを追加しても、それでもH2 dbに値を設定しませんでした。 – doublemc
質問を編集して春の設定を提供できますか? –
追加されたのは、注釈付きの空のクラスです。どこかで読むだけで十分です。 – doublemc