Java 是否需要在Hibernate中显式启动和结束事务?

Java 是否需要在Hibernate中显式启动和结束事务?,java,hibernate,jpa,Java,Hibernate,Jpa,我正在使用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 L

我正在使用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();
  }
}
@实体
公共类所有者{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“name”,nullable=false)
私有字符串名称;
@OneToMany(级联=级联类型.ALL)
private List dogs=new ArrayList();
}
@实体
公家犬{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“name”,nullable=false)
私有字符串名称;
}
公开课{
公共长createPetRelation(字符串所有者名称、字符串dogName){
EntityManager EntityManager=EntityManager工厂。createEntityManager();
狗=新狗();
dog.setName(“Fido”);
Person=新人();
person.setName(“乔”);
person.addDog(dog);
实体管理者坚持(人);
return person.getId();
}
}
我想知道我是否需要将持久性代码包装到事务中,或者Hibernate是否可以根据
@OneToMany
关系确定,如果保存Dog实体失败,那么整个过程应该回滚?从文件上看不清楚


我没有使用容器或框架,只是直接在一个独立的Java项目中使用Hibernate和JPA配置。

是的,您需要在事务中包装代码。与Hibernate实现的JPA一样,当您运行修改数据库的操作时,它不会自动创建事务。但如果您使用像EJB这样的java规范化,则不需要显式地创建事务,因为默认情况下,所有EJB方法都是事务性的。如果您使用像Spring这样的框架,您可以简单地使您的方法具有事务性