我甚至不确定这是可能的,但我认为值得一提。我长期以来一直在使用本机查询。
说我有这个问题。
public static List<PkgLoad> findBetweenDatesWrapSpec( PkgLine pkgLine, WrapSpec wrapSpec, Date startDate, Date endDate, boolean metric ) {
CriteriaBuilder builder = JPA.local.get().em().getCriteriaBuilder();
CriteriaQuery cq = builder.createQuery( PkgLoad.class );
Root<PkgLoad> pkgLoad = cq.from( PkgLoad.class );
Predicate pkgLineQuery = builder.equal( pkgLoad.get( "pkgLineId" ), pkgLine );
Predicate wrapQuery = builder.equal( pkgLoad.get( "wrapSpecId" ), wrapSpec );
Predicate dateQuery = builder.between( pkgLoad.get( "timeStamp" ).as( Date.class ), startDate, endDate );
cq.where( builder.and( pkgLineQuery, wrapQuery, dateQuery ) );
cq.orderBy( builder.desc( pkgLoad.get( "timeStamp" ) ) );
Query query = JPA.local.get().em().createQuery( cq );
return query.getResultList();
}
我在模型中有一个名为盎司的列。如果我想根据属性将盎司转换为公制,该怎么办?现在这个属性依赖于用户名,因此覆盖get方法不是一个选项。如果我覆盖一个get方法,它就会混淆应用程序的其余部分。只是想知道任何选择。感谢。
答案 0 :(得分:1)
首先,我看到您正在使用Play Framework。使用Model中的“find”方法(参见here)创建所需的查询可能更容易。
其次,如果属性依赖于用户,那么当用户登录时,可以接受在Play Session中存储值,该值表示用户是否需要盎司或公制。这样,您的方法只需要通过以下方式检查会话值:
Scope.Session.current().get("key") //key = key for your value
并相应地更改查询。