Как использовать coalesce
или case statement
в JPA 2 с помощью CriteriaBuilder
Для многих записей InitialBy будет пустым, и в результате employeeName для этих записей будет нулевым. Я хотел бы отобразить Сгенерировано системой, если employeeName
имеет значение null для тех проектов, где инициированный сотрудником имеет значение null в таблице базы данных.
У меня есть следующие отношения в Entities
Проект
@Entity
@Table(name = "PROJECT")
public class Project {
@Id
@Column(name = "PROJECTID")
private Long projectId;
....
....
@ManyToOne
@JoinColumn(name = "EMPLOYEENUMBER", referencedColumnName = "EMPLOYEENUMBER")
private Employee empNumber;
@ManyToOne
@JoinColumn(name = "INITIATEDBY", referencedColumnName = "EMPLOYEENUMBER")
private Employee initiatedBy;
Сотрудник
@Entity
@Table(name = "EMPLOYEES")
public class Employee {
@Id
@Column(name = "EMPLOYEENUMBER")
private String employeeNo;
@Column(name = "EMPLOYEENAME")
private String employeeName;
.....
.....
@OneToMany(mappedBy = "empNumber")
private Set<Project> employeeProject;
@OneToMany(mappedBy = "initiatedBy")
private Set<Project> employeeInitiatedBy;
.....
в классе DAOImpl у меня есть
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Project> c = cb.createQuery(Project.class);
Root<Project> emp = c.from(Project.class);
c.orderBy(cb.desc(emp.get("projectNo")));
c.select(emp);
TypedQuery<Project> q = entityManager.createQuery(c);
я пробовал с
Coalesce<String> coalesce = cb.coalesce();
coalesce.value(emp.<String>get("employeeName"));
coalesce.value("System Generated");
Однако, когда я бегу, я получаю исключение, поскольку
java.lang.IllegalArgumentException: Unable to resolve attribute
[employeeName] against path
Любая помощь в этом очень ценна.