2017-03-06 1 views
1

MySQLにすでに挿入されているエンティティの自動生成IDを取得したいと思います。javafxで休止状態のアプリケーションを作成しました。 IDは自動生成され、エンティティのIDを取得する必要があるので、データベースに保存した後、ユーザー名とパスワードを書きます。私はIDとパスワードのIDを入力します。 USERNAME:123、password:asd、ID:1を自動生成します。ユーザー名:123、パスワード:asdに書き込み、削除ボタンをクリックすると、そのエンティティは削除されます。だから私はそれのIDを取得し、IDでそれを削除する必要があり、私はどのようにわからない。 Java Hibernateがユーザー名とパスワードを挿入して削除するときにエンティティのIDを取得して削除する

public class TestMain extends Application { 
    static Employee m = new Employee(); 

    public static void main(String[] args) { launch(args); } 

     @Override 
     public void start(Stage primaryStage) throws Exception { 
      // TODO Auto-generated method stub 

       Stage window = primaryStage; 

       window.setTitle("WELCOME"); 

       Label l1 = new Label(); 
       // l1.setFont(new Font(48)); 
       l1.setText("SMS"); 
       l1.setTranslateY(-180);        

       Button closeBut = new Button("Exit."); 
       closeBut.setTooltip(new Tooltip("Click to exit application")); 
       closeBut.setOnAction(e -> window.close()); 
       Button save = new Button ("Save"); 
       save.setTooltip(new Tooltip("Click to save to database")); 


       Label l2 = new Label("Username "); 
       TextField username = new TextField(); 
       username.setTooltip(new Tooltip("Enter your new username")); 
       username.setPromptText("username"); 
       GridPane.setConstraints(l2,0,0); 
       GridPane.setConstraints(username,1,0); 

       Label l3 = new Label("Password "); 
       PasswordField password = new PasswordField(); 
       password.setTooltip(new Tooltip("Enter your new password")); 
       password.setPromptText("password"); 
       GridPane.setConstraints(l3,0,1); 
       GridPane.setConstraints(password,1,1); 

       Label l4 = new Label(); 
       GridPane.setConstraints(l4,0,4); 
       GridPane.setConstraints(save,0,2); 
       GridPane.setConstraints(closeBut,1,2);    

       //Configureation Hibernate 
       // Configuration config = new Configuration(); 
       //config.configure("hibernate.cfg.xml"); 

        SessionFactory sf = new Configuration().configure().buildSessionFactory(); 

       // 
         save.setOnAction(e -> { 
         m.setUser(username.getText()); 
         m.setPassword(password.getText()); 

         Session session = sf.openSession(); 
         session.beginTransaction();                      
         session.delete(m);      
         session.getTransaction().commit(); 

       }); 

       GridPane grid = new GridPane(); 
       grid.setPadding(new Insets(10,10,10,10)); 
       grid.setVgap(8); 
       grid.setHgap(0); 

       grid.getChildren().addAll(l1,l2,username,l3,password,save,l4,closeBut); 
       grid.setAlignment(Pos.CENTER); 
       Scene scene = new Scene(grid,300,400); 
       window.setScene(scene); 
       window.show(); 

    } 
}    

とJavaクラスの従業員:あなたが言ったように

package mypackage; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.*; 
import javax.persistence.Id; 

@Entity(name="EMPLOYEE") 
public class Employee { 

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ID") 
    private int Id; 


    @Column(name="USERNAME") 
    private String user; 

    @Column(name="PASSWORD") 
    private String password; 


    public int getId() { 
     return Id; 
    } 

    public void setId(int Id) { 
     this.Id = Id; 
    } 

    public String getUser() { 
     return user; 
    } 

    public void setUser(String user) { 
     this.user = user; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 
    } 
+0

save.setOnAction ..これをクリックすると、指定されたユーザー名とパスワードを持つユーザーが既にdbになっていますか?そして、このボタンはそれを削除する必要がありますか?あなたのケースはちょっと混乱しています。私は言う必要があります –

+0

私はまだ削除のための別のボタンを作っていないので、私はsession.save(m)を設定します。と私は私がsession.delete(m)に変更を削除したいと思います。 、それは別のボタンの削除かもしれません。私はそれを行いますが、データベースからエンティティを削除することはできません。 – FIREHIVE

答えて

1

が、私は物事を混在しないように、別のボタンのために行くだろう。

だからあなたの保存アクションは次のようになります。

save.setOnAction(e -> { 
    m.setUser(username.getText()); 
    m.setPassword(password.getText()); 

    Session session = sf.openSession(); 
    session.beginTransaction();                      
    session.save(m);      
    session.getTransaction().commit(); 

とあなたの削除アクションは次のようになります。ここ

delete.setOnAction(e -> { 
    Session session = sf.openSession(); 
    Transaction tx; 

    try{ 
    tx = session.beginTransaction(); 

     Query query = session.createQuery("from Employee where user = :user and password = :password"); 
    query.setString("user", username.getText()); 
    query.setString("password", password.getText()); 

    Employee userToDelete = (Employee)query.uniqueResult(); 

    session.delete(userToDelete);      
    tx.commit(); 
    }catch(Exception e){ 
     tx.rollback(); 
    }finally{ 
     session.close(); 
    } 
+0

これを試しましたが、すべての "querry"という単語が1行で切り詰められていて、 "クエリは生の型です"というメッセージが表示されます。 – FIREHIVE

+0

org.hibernate.Queryを使用していることを確認してください。 –

+0

"User userToDelete =(User)query.uniqueResult();"私のプログラムのユーザーは従業員でなければなりませんか?それはクラスを参照していますか? – FIREHIVE

0

キーはsession.save(m);文の戻り値です。

それはあなたがそれぞれの挿入のためにそう休止状態にあるIDジェネレータを使用する必要が私を1として、あなたがそれ

m = session.save(m); 
... 
session.delete(m); 
0

を削除するために再び使用することができます(生成されたキーを含む)保存されたエンティティを返します。数値で表示されるID値を取得します。そのIDで照会すると、後でそのレコードを削除することができます。

IDジ​​ェネレータでは、データベースにもう1つの列を追加する必要があり、挿入と更新のたびに自動的に休止状態で入力されます。

私が間違っている場合は私を修正してください。

+0

この@GeneratedValue(strategy = GenerationType.IDENTITY)を使ってIDを生成します。 – FIREHIVE

関連する問題