Я нашел другой подход, т. Е. Написание namedQuery для поиска в таблице.Отправка реализации на тот случай, если она кому-нибудь поможет.
final Query query = em.createNamedQuery("UserProject.findByAll");
Класс объекта UserProject:
@Entity
@Table(name = "userproject", schema = "public")
@NamedQueries({ @NamedQuery(name = "UserProject.findByAll", query = "SELECT a FROM UserProject a where a.userid = :userid and a.projectid = :projectid"),
@NamedQuery(name = "UserProject.findByUserId", query = "SELECT a FROM UserProject a where a.userid = :userid"),
@NamedQuery(name = "UserProject.findById", query = "SELECT a FROM UserProject a where a.id = :id" )})
public class UserProject implements Serializable {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "userid")
private Integer userid;
@Column(name = "projectid")
private Integer projectid;
@Column(name = "created")
private Timestamp created;
@Column(name = "modified")
private Timestamp modified;
@Column(name = "modifiedbyid")
private Integer modifiedbyid;
@Column(name = "role")
private String role;
public Integer getId() {
return id;
}
public void setId(final Integer id) {
this.id = id;
}
public Integer getUserid() {
return userid;
}
public void setUserid(final Integer userid) {
this.userid = userid;
}
public void setProjectid(final Integer projectid) {
this.projectid = projectid;
}
public Timestamp getCreated() {
return created;
}
public void setCreated(final Timestamp created) {
this.created = created;
}
public Timestamp getModified() {
return modified;
}
public void setModified(final Timestamp modified) {
this.modified = modified;
}
public Integer getModifiedbyid() {
return modifiedbyid;
}
public void setModifiedbyid(final Integer modifiedbyid) {
this.modifiedbyid = modifiedbyid;
}
public String getRole() {
return role;
}
public void setRole(final String role) {
this.role = role;
}
}
И, наконец, установите параметры запроса, то есть значения композитного ключа (userid, projectid), как:
final Query query = em.createNamedQuery("UserProject.findByAll");
query.setParameter("userid",userProjectDO.getUserid());
query.setParameter("projectid",userProjectDO.getProjectid());
List<UserProject> userProjectList = query.getResultList();
userProjectList будет содержать строку, совпадающую с композитный ключ (userId, projectId)
Одно преимущество, которое я вижу с этим подходом, заключается в том, что я могу написать N количество именованных запросоввнутри класса сущности согласно потребности / требованию.Например: если нам нужно работать с представлением, созданным из этой таблицы.Этого легко достичь, создав сначала представление, а затем написав еще один именованный запрос для работы с ним.