2017-07-20 50 views
0

我使用Hibernate和具有以下設置:我是否需要在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(); 
    } 
} 

我不知道我是否需要包裝的持久性代碼在一個事務中,還是休眠可以根據@OneToMany關係弄清楚,如果保存狗實體失敗,那麼整個事情應該回滾?從文檔中不清楚。

我沒有使用容器或框架,只是在具有JPA配置的獨立Java項目中直接使用Hibernate。

回答

0

是的,你需要將代碼包裝在交易中。像Hibernate實現的JPA一樣,當您運行修改數據庫的操作時,它不會自動創建事務。但是,如果使用EJB這樣的java spefication,則不需要顯式創建事務,因爲默認情況下,所有ejb方法都是事務性的。如果你使用像Spring這樣的框架,你可以簡單地使你的方法成爲事務性的。

相關問題