The native SQL query we want to map in JPA is similar to the following:
select *
from PARTNER
where EVENT_TIMESTAMP >= timestamp '2021-09-17 10:00:00'
and EVENT_TIMESTAMP < timestamp '2021-09-17 11:00:00'
where the two timestamps should come as query parameters.
With JPA you can use a TypedQuery
for example and set the LocalDateTime
values to query parameters via the setParameter
method:
@Stateless
public class PartnerDataRepository {
@Inject private EntityManager em;
public List<PartnerData> findPartnerDataWithinInterval(
LocalDateTime fromDatetime, LocalDateTime toDatetime) {
TypedQuery<PartnerData> 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();
}
}
In the named query itself you can directly pass the parameters before :
as usual, and the implementation (in my case Hibernate) takes care of the rest :
@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
}
Shared ❤️ from Codever. 👉 use the copy to mine functionality to add it to your personal snippets collection.
Top comments (0)