I have a table [order_id, guest_id, maintenance_id, order_timestamp], and I want to select list of timestamps, when the guest_id ordered maintenance_id.
I simply tried to select LocalDateTime with the code below, but hibernate threw:
Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown entity: java.time.LocalDateTime
public List<LocalDateTime> getGuest2MaintenanceOrderTime(long guestId, long maintenanceId) {
List<?> resultList = entityManager.createNativeQuery(
"SELECT * FROM guest_2_maintenance where guest_id = ? and maintenance_id = ?", LocalDateTime.class)
.setParameter(1, guestId)
.setParameter(2, maintenanceId)
.getResultList();
return (List<LocalDateTime>) resultList;
It seems strange to me to create separate class for holding date, and annotate it with @Entity. How to select LocalDateTime and map it to a new LocalDateTime object?
Mapping LocalDateTime as field of @Entity object works fine, but in my case this table field does not belong to any @Entity
CodePudding user response:
Thanks to @akortex and @Human Bean for responsing but I managed to make it works somehow this way:
public List<LocalDateTime> getGuest2MaintenanceOrderTime(long guestId, long maintenanceId) {
List<Timestamp> resultList = entityManager.createNativeQuery(
"SELECT order_timestamp FROM guest_2_maintenance where guest_id = ? and maintenance_id = ?")
.setParameter(1, guestId)
.setParameter(2, maintenanceId)
.getResultList();
List<LocalDateTime> localDateTimeList = new ArrayList<>();
resultList.forEach(timestamp -> {
localDateTimeList.add(timestamp.toLocalDateTime());
});
return localDateTimeList;
}
CodePudding user response:
Your mistake is that you do 'select * ...' There are two ways to solve your problem:
Select only time field
List<LocalDateTime> resultList = entityManager.createNativeQuery( "SELECT order_timestamp FROM guest_2_maintenance where guest_id = ? and maintenance_id = ?", LocalDateTime.class) .setParameter(1, guestId) .setParameter(2, maintenanceId) .getResultList(); return resultList; }Or you should use an entity and then retrieve order_timestamp field from it. For example
