Как настроить CriteriaQuery
, чтобы правильно получить сущность? Я должен выбрать выбранные столбцы
Я использую spring boot 2.2.2.RELEASE
, spring-data-jpa 2.2
и hibernate 5.4.9.Final
.
Моя сущность:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "uuid2")
@Column(name = "CLIENT_VER_ID", columnDefinition = "UUID")
private UUID clientVerId;
@ElementCollection
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "uuid2")
@CollectionTable(name = "T_OBJECT", joinColumns = @JoinColumn(name = "CLIENT_VER_ID",
columnDefinition = "UUID", referencedColumnName = "CLIENT_VER_ID"))
@MapKeyColumn(name = "KEY_COLUMN", columnDefinition = "CHAR(40)")
@Column(name = "VALUE_COLUMN", columnDefinition = "UUID")
private Map<String, UUID> objectIdMap;
@ElementCollection
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "uuid2")
@CollectionTable(name = "T_NAME", joinColumns = @JoinColumn(name = "CLIENT_VER_ID",
columnDefinition = "UUID", referencedColumnName = "CLIENT_VER_ID"))
@MapKeyColumn(name = "KEY_COLUMN", columnDefinition = "CHAR(40)")
@Column(name = "VALUE_COLUMN", columnDefinition = "VARCHAR(255)")
private Map<String, String> nameMap;
@ElementCollection
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "uuid2")
@CollectionTable(name = "T_CLASS", joinColumns = @JoinColumn(name = "CLIENT_VER_ID",
columnDefinition = "UUID", referencedColumnName = "CLIENT_VER_ID"))
@MapKeyColumn(name = "KEY_COLUMN", columnDefinition = "CHAR(40)")
@Column(name = "VALUE_COLUMN", columnDefinition = "UUID")
private Map<String, UUID> classIdMap;
public OutPacket(Long id, UUID bindId, UUID clientVerId, Map<String, UUID> objectIdMap, Map<String,
UUID> classIdMap, Map<String, String> nameMap, String comment) {
this.id = id;
this.bindId = bindId;
this.clientVerId = clientVerId;
this.objectIdMap = objectIdMap;
this.classIdMap = classIdMap;
this.nameMap = nameMap;
this.comment = comment;
}
...
getters and setters
}
и мой сервис
@PersistenceContext
private EntityManager em;
private final PacketRepository packetRepository;
public PacketServiceImpl(PacketRepository packetRepository) {
this.packetRepository = packetRepository;
}
@Override
public List<OutPacket> getPackets() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<OutPacket> outPacketCriteria = cb.createQuery(OutPacket.class);
Root<OutPacket> outPacketRoot = outPacketCriteria.from(OutPacket.class);
outPacketCriteria.multiselect(outPacketRoot.get("id")
outPacketRoot.get("clientVerId"), outPacketRoot.get("objectIdMap"),
outPacketRoot.get("classIdMap"), outPacketRoot.get("nameMap"));
Predicate criteria = cb.conjunction();
Predicate p = cb.equal(outPacketRoot.get("isSent"), false);
criteria = cb.and(criteria, p);
outPacketCriteria.where(criteria);
return em.createQuery(outPacketCriteria).getResultList();
}
}
ошибка:
"Ошибка обработки запроса; вложенное исключение: java .lang.NullPointerException",