你应该把它@Transactional放在DAO类和/或它们的方法中,还是更好地注释使用DAO对象调用的Service类?或者注释两个"层"是否有意义?
我目前正在开发一个使用Spring Boot和Spring Data(它的JpaRepository接口准确)和Hibernate的应用程序.
我喜欢Hiberante的一个方面是它的缓存功能 - 当你提交与特定对象匹配的多个查询时,你将在每次查询执行时返回该对象的相同实例(相对于Java的==运算符).但是,在使用Spring Data和JpaRepository类时,情况似乎并非总是如此.出于这个原因,我假设这里有多个HibernateSession实例在工作.
因此我的问题是:Spring Data如何处理Hibernate会话?什么时候打开或关闭它们?有没有办法将它配置为对我的应用程序的整个运行时使用相同的会话来充分利用Hibernate的对象缓存?有没有理由不这样做?
谢谢,
艾伦
我刚刚开始我的JPA 2.0研究,我有这段代码:
em = SessionFactory.startSession();
tx = em.getTransaction();
Run Code Online (Sandbox Code Playgroud)
我的问题是:我不确定我是否完全理解使用会话和使用事务之间的区别.在几行中,有谁能告诉我他们之间最大的区别?谢谢 !
我有这两个简单的实体Something和Property.该Something实体与多对一关系Property,因此当我创建一个新Something行时,我分配一个现有的Property.
东西:
@Entity
@Table(name = "something")
public class Something implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "owner")
private String owner;
@ManyToOne
private Property property;
// getters and setters
@Override
public String toString() {
return "Something{" +
"id=" + getId() +
", name='" + getName() + "'" +
", owner='" + …Run Code Online (Sandbox Code Playgroud) hibernate ×3
java ×3
jpa ×3
persistence ×2
annotations ×1
dao ×1
orm ×1
session ×1
spring ×1
spring-boot ×1
spring-data ×1
transactions ×1