Собственный 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 ListfindPartnerDataWithinInterval( 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”