2017-07-20 9 views
0

私は休止状態を使用して、次のセットアップ持っている:私は、取引やHibernateがあれば保存していること@OneToMany関係に基づいて把握することができますかどうかの永続コードをラップする必要があるかどうかと思いましてHibernateでトランザクションを明示的に開始および終了する必要がありますか?

@Entity 
public class Owner { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @Column(name = "name", nullable = false) 
    private String name; 

    @OneToMany(cascade = CascadeType.ALL) 
private List<Dog> dogs = new ArrayList<>(); 
} 

@Entity 
public class Dog { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @Column(name = "name", nullable = false) 
    private String name; 
} 


public class PersonDao { 

public Long createPetRelation(String ownerName, String dogName) { 

    EntityManager entityManager = entityManagerFactory.createEntityManager(); 

    Dog dog = new Dog(); 
    dog.setName("Fido"); 
    Person person = new Person(); 
    person.setName("Joe"); 
    person.addDog(dog); 
    entityManager.persist(person); 

    return person.getId(); 
    } 
} 

を犬のエンティティのすべてが元に戻す必要があります失敗?ドキュメントからは分かりません。

私はコンテナやフレームワークを使用していません。JPA設定のスタンドアロンJavaプロジェクトでHibernateをまっすぐに伸ばしてください。

答えて

0

はい、トランザクションでコードをラップする必要があります。 Hibernateが実装するJPAと同様に、データベースを変更する操作を実行すると自動的にトランザクションが作成されません。しかし、EJBのようなjava speficationを使用する場合、デフォルトではすべてのejbメソッドがトランザクション型であるため、トランザクションを明示的に作成する必要はありません。 Springのようなフレームワークを使用する場合は、単にメソッドをトランザクションにすることができます。

関連する問題