我正在使用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();
}
}
我想知道是否需要在事务中包装持久性代码,或者Hibernate是否可以根据@OneToMany
关系弄清楚如果Dog实体的保存失败那么整个事情应该回滚?从文档中不清楚。
我没有使用容器或框架,只是在具有JPA配置的独立Java项目中直接使用Hibernate。
答案 0 :(得分:0)
是的,您需要将代码包装在事务中。与Hibernate实现的JPA一样,当您运行修改数据库的操作时,它不会自动创建事务。但是如果使用像EJB这样的java表示,则不需要显式创建事务,因为默认情况下,所有ejb方法都是事务性的。如果你使用像Spring这样的框架,你可以简单地使你的方法成为事务性的。