2016-08-04 14 views
4

私のプロジェクトにはDAOレイヤがあります。ここに私のUsersDaoインタフェースであり、それはサービス層でのトランザクションの作成方法

 public interface UsersDao {  
public Users insert(Users object); 
} 



public class UsersDaoImpl implements UsersDao { 

    @Override 
    public Users insert(Users object) { 

     String sqlQuery = null; 
     PreparedStatement stmt = null; 

     try (Connection connection = DbConnector.getConnection()) { 

      sqlQuery = "INSERT INTO `users`(login, password,passwordSalt, name, surname)" + " values (?, ?,?,?,?);"; 

      stmt = connection.prepareStatement(sqlQuery); 

      stmt.setString(1, "fsf"); 
      stmt.setString(2, "f"); 
      stmt.setString(3, "af"); 
      stmt.setString(4, "fddsg"); 
      stmt.setString(5, "sdgsgd"); 
      stmt.executeUpdate(); 
      stmt.close(); 
      return object; 

     } catch (SQLException e) { 
      System.err.println(e.getMessage()); 
      return null; 
     } 
    } 

UsersDaoImpl実装だ。ここに私サービス層のクラスとインタフェースです。

public interface UsersService{ 
public Users insert(Users object); 
} 

public class UsersServiceImpl implements UsersService{ 
UsersDaoImpl users = new UsersDaoImpl(); 

public Users insert(Users object){ 

return users.insert(object); 

} 

例外がキャッチされたときに私がロールバックできるサービスメソッドに書きたいものは何ですか?私のサービス方法でトランザクションを書き込むにはどうすればいいですか?いくつかの例を教えていただけますか?ありがとう!

+1

を見て、あなたは通常、そのためにEJBを使用して使用する場合。これはあなたの環境で利用可能ですか?なぜならJPA onelinerの代わりにJDBCの定型文を使用しているという事実は、通常のJava EEサーバではなくTomcatのようなベアボーンサー​​ブレットコンテナを使用していることを強く示唆しているからです。 – BalusC

答えて

0

最初に例外が発生した場合、データセットは挿入されないため、ロールバックされます。

アトミック操作が分離しており、一種の連鎖である場合は、トランザクションを使用します。つまり、1つのエラーをロールバックする必要がある場合です。 これを手動で実装したい場合は、Xをポイントして何が起きたのかを元に戻す必要があります。しかし、それは非常に非常にエラーとスーパーフレキシブルになりやすいです。したがって、この目的のために基礎となるDBシステムを使用することをお勧めします。これはこの機能を統合したものです。または、永続性レイヤーを使用します。

あなたはJDBC compiantドライバーは、Java EEでは、ここでhttps://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

+0

ちょっとした質問です。パスワードをプレーンテキストで保存しないことを願っていますか? – sascha10000

+1

いいえ!私はそれをハッシュします! –

関連する問題