I have the following DTO:
<code>@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MyDto {
private Integer field1;
private CustomEnum field2;
}
</code>
<code>@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MyDto {
private Integer field1;
private CustomEnum field2;
}
</code>
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MyDto {
private Integer field1;
private CustomEnum field2;
}
The custom enum:
<code>public enum CustomEnum {
ONE("One"),
TWO("Two");
private final String name;
CustomEnum(String name) {
this.name = name;
}
public static CustomEnum fromString(String value) {
Optional<CustomEnum> found = Arrays.stream(values())
.filter(customEnum -> customEnum.toString().equals(value))
.findFirst();
return typeFound.orElse(null);
}
@Override
public String toString() {
return this.name;
}
}
</code>
<code>public enum CustomEnum {
ONE("One"),
TWO("Two");
private final String name;
CustomEnum(String name) {
this.name = name;
}
public static CustomEnum fromString(String value) {
Optional<CustomEnum> found = Arrays.stream(values())
.filter(customEnum -> customEnum.toString().equals(value))
.findFirst();
return typeFound.orElse(null);
}
@Override
public String toString() {
return this.name;
}
}
</code>
public enum CustomEnum {
ONE("One"),
TWO("Two");
private final String name;
CustomEnum(String name) {
this.name = name;
}
public static CustomEnum fromString(String value) {
Optional<CustomEnum> found = Arrays.stream(values())
.filter(customEnum -> customEnum.toString().equals(value))
.findFirst();
return typeFound.orElse(null);
}
@Override
public String toString() {
return this.name;
}
}
So, I’m using the Criteria Query API to query and return results of DTO type using projection:
<code>final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<Myto> cq = cb.createQuery(MyDto.class);
.
.
.
cq.select(
cb.construct(
MyDto.class,
...,
cb.selectCase()
.when(<some predicate>, CustomEnum.ONE)
.otherwise(CustomEnum.TWO)
.alias("field2")
)
);
.
.
.
return query.getResultList();
</code>
<code>final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<Myto> cq = cb.createQuery(MyDto.class);
.
.
.
cq.select(
cb.construct(
MyDto.class,
...,
cb.selectCase()
.when(<some predicate>, CustomEnum.ONE)
.otherwise(CustomEnum.TWO)
.alias("field2")
)
);
.
.
.
return query.getResultList();
</code>
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<Myto> cq = cb.createQuery(MyDto.class);
.
.
.
cq.select(
cb.construct(
MyDto.class,
...,
cb.selectCase()
.when(<some predicate>, CustomEnum.ONE)
.otherwise(CustomEnum.TWO)
.alias("field2")
)
);
.
.
.
return query.getResultList();
But when executing the code, I get the following error:
java.lang.NullPointerException: Cannot invoke
“org.hibernate.metamodel.mapping.JdbcMapping.getJdbcValueBinder()”
because “jdbcMapping” is null
How can I fix this?