0

たとえば、休止状態では、関係のある2つのオブジェクトがあります。オブジェクトはこんな感じ

最初のオブジェクト:顧客

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

2番目のオブジェクト: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を選択したい。私は2つの方法でそれを取得します。最初の方法:

@Override
public List<CustomerController> customerController(int customerId){
    Customer customer = (Customer) sessionFactory.getCurrentSession().get(Customer.class, customerId);
    return customer.getCustomerControllers()
}

2番目の方法:

 return (List<CustomerController>)sessionFactory.getCurrentSession().createQuery("SELECT O FROM CustomerController O WHERE O.customerId=:CONDITION")
.setParameter("CONDITION", customerId)
.list();

最も効率的な方法はどれですか?なんで?ありがとうございました。

4

1 に答える 1

1

show SQLパラメータを「オン」にして監視しやすくするために、

最初の休止状態では、エンティティマッピングを使用して2つのSQLクエリを生成できると思います。2番目のケースでは、1つの選択クエリのみを生成する必要があります。

FetchType.EAGERを使用する場合、HibernateはCustomerエンティティとCustomerControllerエンティティをマップすると思います。HibernateがHQLを使用してCustomerControllerのみをフェッチすることを期待します。休止状態の動作を監視する必要があることを確認します。

于 2013-01-09T12:28:51.330 に答える