Java Hibernate加载已手动设置的实体
我有一个实体Java Hibernate加载已手动设置的实体,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,我有一个实体 @Entity public class A { @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "B_ID") B classB; } @Entity public class B { @OneToMany(mappedBy = "classB") @OnDelete(action = OnDeleteAction.CASCADE) @LazyCollection(La
@Entity
public class A {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "B_ID")
B classB;
}
@Entity
public class B {
@OneToMany(mappedBy = "classB")
@OnDelete(action = OnDeleteAction.CASCADE)
@LazyCollection(LazyCollectionOption.TRUE)
List<A> classACollection;
}
为什么hibernate会这样做?有没有办法防止这种低效的查询发生 服务层代码是在事务中吗?是的,服务层是@TransactionalHibernate,如果实例是持久的B classB=dao,则将从一级缓存加载实体。getClassB应该在事务方法中,如果B的实例被分离,则他将尝试再次加载。我明白了,是的,classB的检索发生在单独的服务层调用/事务中。
// Service Layer Code
B classB = dao.getClassB();
A classA = new A();
classA.setClassB(classB);
// Dao function call will invoke hibernate session save()
// this call will result in a SELECT query being made by hibernate
// to retrieve the instance of classB even though I just set it
// in the previous line.
dao.save(classA);