0

在休眠中,例如我有两个有关系的对象。对象是这样的

第一个对象:客户

@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
}

第二个对象:客户控制器

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

哪种方式最有效?为什么?谢谢你。

4

1 回答 1

1

确保更容易“打开”显示 SQL 参数并对其进行监控。

我想在第一个休眠中能够生成两个带有实体映射的 SQL 查询。在第二种情况下,应该只生成一个选择查询。

如果我们使用 FetchType.EAGER 认为 Hibernate 将映射CustomerCustomerController实体。希望 Hibernate 仅使用 HQL获取CustomerController 。以确保您应该监视 Hibernate 行为。

于 2013-01-09T12:28:51.330 回答