Here's the relevant section of the Java EE 6 tutorial:
Abstract Entities
An abstract class
may be declared an entity by
decorating the class with @Entity
.
Abstract entities are like concrete
entities but cannot be instantiated.
Abstract entities can be queried just
like concrete entities. If an abstract
entity is the target of a query, the
query operates on all the concrete
subclasses of the abstract entity:
@Entity
public abstract class Employee {
@Id
protected Integer employeeId;
...
}
@Entity
public class FullTimeEmployee extends Employee {
protected Integer salary;
...
}
@Entity
public class PartTimeEmployee extends Employee {
protected Float hourlyWage;
}
If I read this right, your query:
select s from Sample where s.type = :type
Should only return elements of the specified subtype if type
is the discriminator column, so the only thing that's left for you to do is to cast the result list to your requested sub type.