У меня два класса сущностей один:
@Table(name = "package")
public class Package {
@Id
@Column(name = "package_id", insertable = false, nullable = false)
private Long packageId;
@Column(name = "timestamp", nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
@Column(name = "name", nullable = false)
private String name;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "queue_id",foreignKey=@ForeignKey(name = "package_queue_id_fk"))
private Queue Queue;
@Column(name = "file_number", nullable = true)
private Integer fileNumber;
И
@Table(name = "queue")
public class Queue {
@Id
@Column(name = "queue_id", insertable = false, nullable = false)
private Integer queue;
@Column(name = "description", nullable = true)
private String description;
@Column(name = "name", nullable = false)
private String name;
@OneToMany(mappedBy = "Queue", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REFRESH })
@MapKeyColumn(name = "package_id")
private Set<Package> packages;
И я хотел бы найти Список номеров файлов в зависимости от имени.пакета и.пакета.queue_id
Итак, в настоящее время у меня есть только одно условие (имя), и оно выглядит так:
public List<Integer> getAllFileNumbers(String fileName, Integer queueId) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Integer> query = cb.createQuery(Integer.class);
Root<Package> package = query.from(package.class);
query.select(package.get("fileNumber")).where(cb.equal(package.get("name"), fileName));
return em.createQuery(query).getResultList();
}
Любой желающий может помочь мне добавить еще один, в дополнение к тому, что значение должно быть от другого объекта.
Edit:
Итак, после @Leviand hint я сделал это так:
Predicate filenamePred= cb.equal(package.get("name"), fileName);
Predicate queueIdPred = cb.equal(package.get("queue_id"), queueId);
query.select(package.get("fileNumber")).where(cb.and(filenamePred, queueIdPred ));
Я получил ошибку:
Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [queue_id] on this ManagedType