Java Reference
In-Depth Information
join , right outer join , and full outer join . If you use cross join , just specify both classes
in the from clause ( from Product p, Supplier s ). For the other joins, use a join clause after
the from clause. Specify the type of join, the object property to join on, and an alias for the
other class.
You can use inner join to obtain the supplier for each product, and then retrieve the
supplier name, product name, and product price, as so:
select s.name, p.name, p.price from Product p inner join p.supplier as s
You can retrieve the objects using similar syntax:
from Product p inner join p.supplier as s
We used aliases in these HQL statements to refer to the entities in our query expressions.
These are particularly important in queries with associations that refer to two different entities
with the same class—for instance, if we are doing a join from a table back to itself. Commonly,
these types of joins are used to organize tree data structures.
Notice that Hibernate does not return Object objects in the result set; instead, Hibernate
returns Object arrays in the results. You will have to access the contents of the Object arrays
to get the Supplier and the Product objects.
If you would like to start optimizing performance, you can ask Hibernate to fetch the
associated objects and collections for an object in one query. If you were using lazy loading
with Hibernate, the objects in the collection would not be initialized until you accessed them.
If you use fetch on a join in your query, you can ask Hibernate to retrieve the objects in the
collection at the time the query executes. Add the fetch keyword after the join in the query,
like so:
from Supplier s inner join fetch s.products as p
When you use fetch for a query like this, Hibernate will return only the Supplier objects,
not the Product objects. This is because you are specifying the join, so Hibernate knows which
objects to fetch (instead of using lazy loading). If you need to get the Product objects, you can
access them through the associated Supplier object. You cannot use the properties of the
Product objects in expressions in the where clause. Use of the fetch keyword overrides any
settings you have in the mapping file for object initialization.
Aggregate Methods
HQL supports a range of aggregate methods, similar to SQL. They work the same way in HQL
as in SQL, so you do not have to learn any specific Hibernate terminology. The difference is
that in HQL, aggregate methods apply to the properties of persistent objects. The count(...)
method returns the number of times the given column name appears in the result set. You
may use the count(*) syntax to count all the objects in the result set, or count(product.name)
to count the number of objects in the result set with a name property. Here is an example using
the count(*) method to count all products:
select count(*) from Product product
Search WWH ::




Custom Search