2016-04-20 9 views
0

私は4つのオブジェクトを持っており、すべてのオブジェクトにsession.save(obj)を使いたくありません。すべてのオブジェクトをループ内または一度に保存する方法はありますか?Hibernate 1つのsession.saveで多くの異なるオブジェクトを保存します。

ループの場合は、変数名を増やす必要がありますが、問題を解決するための「良い方法」は不可能だと思います。

final Test a1 = new Test(6,"AA", 50, 100000,"20.04.2016","AAA", 111, "2016", "EEE"); 
    final Test a2 = new Test(7,"AB", 1050, 200000,"20.04.2016","BBB", 333, "2016", "EEE"); 
    final Test a3 = new Test(8,"AC", 40, 300000,"20.04.2016","CCC", 222, "2016", "UUU", "YY", 5, "SSS"); 
    final Test a4 = new Test(9,"PD", 400, 400000,"20.04.2016","DDD", 444, "2016", "CCC", "YY", 12, "RRR"); 

    session.beginTransaction(); 
    session.save(a1); 
    session.save(a2); 
    session.save(a3); 
    session.save(a4); 

    session.getTransaction().commit() 
+0

* "私は4つのオブジェクトを持っていると私はすべてのオブジェクトに対してsession.save(OBJ)を使用する必要はありません。" *なぜ正確?文脈を提供することで、あなたが探している解決策の種類を知ることができます。 – Gimby

答えて

1

してください、配列

Test[] tests = new Test[] {new Test(), new Test()}; 

for(Test test : tests) { 
    session.save(test); 
} 
1

を使用し、それはあなたのために有用である、バッチ処理についてお読みください。例えば

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch15.html

Session session = sessionFactory.openSession(); 
Transaction tx = session.beginTransaction(); 

for (int i=0; i<100000; i++) { 
    Customer customer = new Customer(.....); 
    session.save(customer); 
    if (i % 20 == 0) { //20, same as the JDBC batch size 
     //flush a batch of inserts and release memory: 
     session.flush(); 
     session.clear(); 
    } 
} 

tx.commit(); 
session.close();