【问题标题】:HQL Object Named ParametersHQL 对象命名参数
【发布时间】:2011-08-10 13:57:26
【问题描述】:

我想知道是否可以从 HQL 中名为参数的对象中检索特定列。

例子

public class Product
{
    private int id;
    private Supplier supplier;

    private String name;
    private String description;
    private double price;

    public Product()
    {
        super();
    }

    public Product(String name, String description, double price)
    {
        super();
        this.name = name;
        this.description = description;
        this.price = price;
    }

    public String getDescription()
    {
        return description;
    }
    public void setDescription(String description)
    {
        this.description = description;
    }
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }

    public Supplier getSupplier()
    {
        return supplier;
    }
    public void setSupplier(Supplier supplier)
    {
        this.supplier = supplier;
    }

    public double getPrice()
    {
        return price;
    }
    public void setPrice(double price)
    {
        this.price = price;
    }
}

如您所见,我创建了产品,其中包含一个供应商对象。 所以当我做 HQL 并打电话时

String hql = "from Product as product where product.supplier=:supplier";
        Query query = session.createQuery(hql);
        query.setEntity("supplier",supplier);
        List results = query.list();
        displayProductsList(results);

但是是否可以只获取产品的供应商名称? 而不仅仅是整个供应商?

【问题讨论】:

  • 我不明白你在问什么。您想只选择供应商的名称吗?或者您想按供应商名称查找所有产品?或者您想选择产品但只填写其供应商名称而不是其所有属性,即获取所有产品字段 + 产品的供应商名称?
  • 尝试选择供应商的名称,因此它将是 product.supplier.name
  • 如果您只需要供应商名称,请使用从供应商供应商中选择供应商名称。如果您只对供应商感兴趣,为什么还要使用 Product 实体?
  • 因为我想要特定供应商名称的产品。
  • 因此,您不想选择供应商的名称。您要选择产品。您想选择哪些产品?那些有给定名称的供应商?

标签: hql


【解决方案1】:

只是不要将供应商实例传递给您的查询,而是直接传递供应商的名称:

String hql = "from Product as product where product.supplier.name = :supplierName";
Query query = session.createQuery(hql);
query.setString("supplierName", supplier.getName());
List results = query.list();
displayProductsList(results);

【讨论】:

  • 嗯,很有趣,我没想到,但我还在学习!哈哈
  • @jbnizet 你能告诉我这是什么=: 或者它在HQL 中叫什么?
  • = 是等号,就像在 SQL 中一样。 :supplierName 为查询定义了一个命名参数。
猜你喜欢
  • 2017-12-30
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2019-04-18
相关资源
最近更新 更多