更新のメモ
明示的に更新メソッド(EntityManager.merge())を呼び出さない更新と、更新メソッド(EntityManager.merge())を呼び出す更新の動作確認。
EntytyManager.merge() を使用しない更新(関連テーブル) ← いや削除・・・
package sample; import java.util.ArrayList; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class UpdateExample1 { public static void main(String[] args) { int id = -1; EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernate"); { EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); Actor brad = new Actor("Brad Pitt"); Actor orlando = new Actor("Orlando Bloom"); Movie troy = new Movie("Troy"); troy.addActor(brad); troy.addActor(orlando); em.persist(troy); id = troy.getId(); tx.commit(); em.close(); } { EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); Movie troy = em.find(Movie.class, id); // 関連を削除 troy.setActors(new ArrayList()); tx.commit(); em.close(); } emf.close(); } }
実行結果
select * from ACTOR ;
ID | NAME |
---|---|
102 | Eric Bana |
select * from MOVIE;
ID | NAME |
---|---|
91 | Troy |
select * from MOVIE_ACTOR;
MOVIE_ID | ACTOR_ID |
---|---|
91 | 102 |
EntytyManager.merge() を使用しない更新(Actorテーブル)
package sample; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class UpdateExample2 { public static void main(String[] args) { int id = -1; EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernate"); { EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); Actor brad = new Actor("Brad Pitt"); Movie troy = new Movie("Troy"); troy.addActor(brad); em.persist(troy); id = troy.getId(); tx.commit(); em.close(); } { EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); Movie troy = em.find(Movie.class, id); Listactors = troy.getActors(); Actor actor = actors.get(0); actor.setName("Eric Bana"); tx.commit(); em.close(); } emf.close(); } }
実行結果
select * from ACTOR ;
ID | NAME |
---|---|
102 | Eric Bana |
select * from MOVIE;
ID | NAME |
---|---|
91 | Troy |
select * from MOVIE_ACTOR;
MOVIE_ID | ACTOR_ID |
---|---|
91 | 102 |
EntytyManager.merge() を使用した更新
package sample; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class MergeExample { public static void main(String[] args) { int id = -1; EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernate"); { EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); Actor brad = new Actor("Brad Pitt"); Movie troy = new Movie("Troy"); troy.addActor(brad); em.persist(troy); id = troy.getId(); tx.commit(); em.close(); } { EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); Movie mexican = new Movie(); mexican.setId(id); mexican.setName("The Mexican"); em.merge(mexican); tx.commit(); em.close(); } emf.close(); } }
実行結果
select * from ACTOR ;
ID | NAME |
---|---|
101 | Brad Pitt |
select * from MOVIE;
ID | NAME |
---|---|
90 | The Mexican |
select * from MOVIE_ACTOR;
MOVIE_ID | ACTOR_ID |
---|