0

| のテーブルがあります。顧客 ID | 顧客名 | 顧客国 |。

CustomerName と CustomerCountry の組み合わせに対応する CustomerId を取得する HQL クエリを作成するにはどうすればよいですか?

ここに私のCustomerDaoImplがあります:

@Repository
public class CustomerDaoImpl implements CustomerDao {

@Autowired(required=true)
private SessionFactory sessionFactory;

public Customer getCTID(String customerName, String customerCountry) {
    return (Customer) 
this.sessionFactory.getCurrentSession().createQuery(/* Some query that gets CTID corresponding to customerName and customerCountry*/);

}
}

この CustomerId を使用して、新しい配送のために DeliveryTable に挿入したいと考えています。配送情報を入力するフォームに DTO を使用しており、CustomerService を使用して CustomerDAO で CustomerId を取得する新しい配送を作成するために DeliveryService を使用します。

助けてくれてありがとう、D

4

2 に答える 2

0

JB Nizetが指摘したように、名前付きパラメータを使用したNitinの回答は次のとおりです。

Long id = this.sessionFactory.getCurrentSession().createQuery(
   "select customerId from Customer where customerName = :name and customerCountry = :country")
   .setParameter("name", customerName).setParameter("country", customerCountry).uniqueResult();
于 2012-04-18T19:56:15.727 に答える
0

私が理解しているように、Customer:Delivery には 1:N の関係があります。ID を直接使用するのではなく、多対 1 のマッピングを使用すると便利です。

それでもHQLが必要な場合は、使用できます

this.sessionFactory.getCurrentSession().createQuery(
    "from Customer customer where customer.customerName = :name "
    + " and customer.customerCountry = :country").setParameter("name",customerName).setParameter("country",countryName).uniqueResult();

uniqueResultcustomerName + Country は DB で一意であると想定しています。使用する必要がない場合は、 to.setMaxResult(1)からのマッピングでエラーが発生します。ListCustomer

于 2012-04-18T14:45:37.190 に答える