@Entity
public class Person {
@ElementCollection
private List locations;
[...]
}
@Embeddable
public c
The key phrase in Pascal's reply is
the target objects cannot be queried, persisted, merged independently of their parent object
As you are dependent on the parent object, you should be able to do this using something like ...
SELECT p FROM PERSON, IN (p.locations) WHERE p.id = ?1 AND locations = ?2
(Based on the reply at Execute "MEMBER OF" query against 'ElementCollection' Map fields in JP-QL (JPA 2.0) - which is actually a Map @ElementCollection which was what I was looking for an answer to!)
This is not possible, you cannot query an Embeddable. From the JPA Wikibook:
Embedded Collections
An
ElementCollectionmapping can be used to define a collection ofEmbeddableobjects. This is not a typical usage ofEmbeddableobjects as the objects are not embedded in the source object's table, but stored in a separate collection table. This is similar to aOneToMany, except the target object is anEmbeddableinstead of anEntity. This allows collections of simple objects to be easily defined, without requiring the simple objects to define anIdorManyToOneinverse mapping.ElementCollectioncan also override the mappings, or table for their collection, so you can have multiple entities reference the same Embeddable class, but have each store their dependent objects in a separate table.The limitations of using an
ElementCollectioninstead of aOneToManyis that the target objects cannot be queried, persisted, merged independently of their parent object. They are strictly privately-owned (dependent) objects, the same as anEmbeddedmapping. There is no cascade option on anElementCollection, the target objects are always persisted, merged, removed with their parent.ElementCollectionstill can use a fetch type and defaults to LAZY the same as other collection mappings.
To achieve what you want, use a OneToMany and an Entity instead of an ElementCollection and an Embeddable. Or change your approach and query the Person.