coalesce
またはcase statement
CriteriaBuilder を使用して JPA 2 で使用する方法
多くのレコードでは、initiatedBy は空になり、その結果、それらのレコードの employeeName は null になります。データベーステーブルでinitiatedBy employeeがnullであるプロジェクトに対して、nullの場合はSystem Generatedを表示したいと思います。employeeName
私はエンティティで次の関係を持っています
計画
@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
これに関するヘルプは非常に高く評価されます。