2017-01-31 6 views
1

はここに私のコントローラのメソッドであるインメモリ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をどこか別に持っていますか?基本/コンソールまたは別のポートにはありませんか?これをどうすれば確認できますか?

答えて

0

私はあなたのサービスのトランザクションの部分が不足していると思います。あなたは春の文脈でトランザクションマネージャを定義しましたか?

もしそうなら、サービスに注釈@Transactionalを追加する必要があります。たとえば:

@Service 
public class UserServiceBean { 

    @Transactional 
    public User saveUser(User user) { 
     return userRepository.save(user); 
    } 
} 
+0

CrudRepositoryインターフェイスでSpringブートを使用しているときにトランザクションマネージャが自動構成されていませんか?あなたが言及したように私はTransactionalを追加しても、それでもH2 dbに値を設定しませんでした。 – doublemc

+0

質問を編集して春の設定を提供できますか? –

+0

追加されたのは、注釈付きの空のクラスです。どこかで読むだけで十分です。 – doublemc

0

私は追加する必要がありました:

spring.datasource.url=jdbc:h2:~/test 
spring.datasource.driver-class-name=org.h2.Driver 

をapplication.propertiesに、それが今で素晴らしい作品。私はちょうど私がそれが私のためにそれを自動的に設定するので、私がそれを必要としないと思ったが、明らかにそれはしません。

+0

spring-boot 1.5+の場合、URLだけで十分です – rajadilipkolli

関連する問題