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);