I have simple Entitly class with the @EmbeddedId
(Integer
and String
fields in separate class). And I use the Spring Data (org.s
It seems your query is using column names. It should contain the property names, including navigation into embedded objects. There's also a related question here on SO: How to write JPQL SELECT with embedded id?
select distinct id.id from EntityClass where userId = :userId and (...)
The first id
refers to attribute id
of EntityClass
(of type EmbeddedIdClass
), and the second one refers to the id
property of EmbeddedIdClass
.
Also, make sure there's a userId
property in EntityClass
.
(by Yosi Lev) This can be done as the following: Suppose your main entity is:
@Entity
@Table(name="JRULES_FLOW")
public class JrulesFlow implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private JrulesFlowPK id;
@Column(name="NEXT_SEQ")
private int nextSeq;
@Column(name="REF_ID")
private String refId;
@Column(name="TASK_TYPE")
private String taskType;
@Column(name="VALUE_TO_FIND")
private String valueToFind;
}
And your PK class is :
@Embeddable
public class JrulesFlowPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@Column(name="FLOW_ID")
private String flowId;
@Column(name="TASK_SEQ")
private long taskSeq;
}
The JPA repository method name shouls include the name of the id field in the main class followed by the property you want to query uppon within the PK class:
public interface JrulesFlowRepository extends JpaRepository<JrulesFlow,
JrulesFlowPK> { // NOTE: put here both classes - also the pk class..
public List<JrulesFlow> findByIdFlowId(String flowId); // Id - is the
// @EmbeddedId in JrulesFlow. FlowId is an attribute
// within JrulesFlowPK
}