The read-only transaction basically looks as follows, but increments the version number for optimistic synchronization:
Session s = HibernateUtil.getSession();
Transaction t = s.beginTransaction();
String lastname = "...";
Query q = s.getNamedQuery(CUST_BY_LASTNAME_FETCH_ORDERS);
q.setString("lastname", lastname);
q.setCacheable(true);
q.setCacheRegion("org.hibernate.cache.StandardQueryCache");
Collection<CustomerData> customers = query.list();
t.commit();
The POJO with the named query looks as follows:
@Entity(access=FIELD)
@Table(name="customer", schema="hska")
@Inheritance()
@DiscriminatorColumn(name="kind", length=1)
@NamedQueries({
CustomerData.CUST_BY_LASTNAME_FETCH_ORDERS,
queryString = "FROM CustomerData c LEFT JOIN FETCH c.orders WHERE c.lastname = :lastname")
})
@Cache(usage=READ_WRITE, region="CustomerCache")
public abstract class KundeData implements java.io.Serializable {
@Id(generate=AUTO, generator="customer_sequence_name")
@SequenceGenerator(name="customer_sequence_name",
sequenceName="customer_sequence")
protected long id = 0;
@Version
protected int version = 0;
...
}
|