例如,在休眠状态下,我有两个具有关联的对象。对象是这样的
第一个对象:客户
@Entity
@Table(name = "customer", catalog = "test")
public class Customer implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Set<CustomerController> customerControllers = new HashSet<CustomerController>(0);
public Customer() {
}
//getter & setter
}
第二个对象:CustomerController
@Entity
@Table(name = "customer_controller", catalog = "test")
public class CustomerController implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private Customer customer;
//constructor, getter & setter
}
我想选择某些客户的customer_controller。我通过两种方式得到它。第一种方式:
@Override
public List<CustomerController> customerController(int customerId){
Customer customer = (Customer) sessionFactory.getCurrentSession().get(Customer.class, customerId);
return customer.getCustomerControllers()
}
第二种方式:
return (List<CustomerController>)sessionFactory.getCurrentSession().createQuery("SELECT O FROM CustomerController O WHERE O.customerId=:CONDITION")
.setParameter("CONDITION", customerId)
.list();
哪种方式最有效?为什么?
谢谢。
最佳答案
为了确保更容易“打开”显示SQL参数并对其进行监视。
我想在第一个休眠状态下能够生成带有实体映射的两个SQL查询。
在第二种情况下,应仅生成一个选择查询。
如果我们使用FetchType.EAGER,则认为Hibernate将映射Customer和CustomerController实体。希望Hibernate使用HQL仅获取CustomerController。为了确保您应该监视休眠行为。