Собственный SQL-запрос, который мы хотим отобразить в JPA, аналогичен следующему:
select * from PARTNER where EVENT_TIMESTAMP >= timestamp '2021-09-17 10:00:00' and EVENT_TIMESTAMP < timestamp '2021-09-17 11:00:00'
где две временные метки должны быть в качестве параметров запроса.
С помощью JPA вы можете использовать Типизированный запрос например, и установите значения LocalDateTime для параметров запроса с помощью метода setParameter :
@Stateless
public class PartnerDataRepository {
@Inject private EntityManager em;
public List findPartnerDataWithinInterval(
LocalDateTime fromDatetime, LocalDateTime toDatetime) {
TypedQuery query =
em.createNamedQuery(
PartnerData.FIND_PARTNER_DATA_IN_TIME_INTERVAL, PartnerData.class);
query.setParameter(PartnerData.FROM_DATETIME, fromDatetime);
query.setParameter(PartnerData.TO_DATETIME, toDatetime);
return query.getResultList();
}
}
В самом именованном запросе вы можете напрямую передать параметры перед : , как обычно, а реализация (в моем случае Hibernate) позаботится обо всем остальном:
@Entity
@Access(AccessType.FIELD)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = PartnerData.TABLE_NAME)
@NamedQueries({
@NamedQuery(
name = PartnerKerndaten.FIND_PARTNER_DATA_IN_TIME_INTERVAL,
query = "select m from PartnerData m where eventTimestamp >= :fromDatetime and eventTimestamp < :toDatetime")
})
public class PartnerData {
public static final String TABLE_NAME = "PARTNER";
public static final String FROM_DATETIME = "fromDatetime";
public static final String TO_DATETIME = "toDatetime";
public static final String FIND_PARTNER_DATA_IN_TIME_INTERVAL =
"findPartnerDataWithinInterval";
//... rest ignored for brevity
}
Поделился ❤️ с Кодевер . 👉 используйте функцию копировать в мой , чтобы добавить ее в свою личную коллекцию фрагментов.
Оригинал: “https://dev.to/codever/how-to-do-a-select-clause-comparison-of-localdatetime-in-jpa-egm”