【问题标题】:Grails GORM : SELECT ASGrails GORM:选择为
【发布时间】:2015-03-18 19:22:03
【问题描述】:

我正在尝试让所有今天出生的用户都使用 GORM,但我无法在 Grails 中编写此查询:

SELECT
DAY(dateOfBirth) AS 'day',
MONTH(dateOfBirth) AS 'month'
FROM Users
WHERE day = '...' AND month = '...';

... 将替换为今天的值。

最小的User域类

class User {

  Date dateOfBirth

  ...

}

最小的UserService

@Transactional
class UserService {

  def getTodayBirthdays() {

    def bornTodayQuery = User.where{
      /* I'm thinking here I must
       * select the DAY and MONTH from the DB
       * and compare it with the today ones.
       */
    }       

    User usersBornToday = bornTodayQuery.findAll()      

    usersBornToday      

  }

}

任何想法如何使用 GORM 做一个别名(SELECT field AS alias)?

我正在使用:

  • Grails 2.4.4

谢谢!

【问题讨论】:

  • @sebnukem 有点像,但我一直在寻找一种不使用executeQuery 的方法。当然,如果它存在的话。
  • 我认为你不能使用 GORM 但我可能是错的......
  • @sebnukem 显然你可以接受铍的回答。谢谢!

标签: grails grails-orm


【解决方案1】:

您可以在服务中使用 where 查询

@Transactional(readOnly = true)
def listBirthday(int _month, int _day) {
  // Calendar.JANUARY equals to zero!
  def m = _month + 1
  // Run a where query on the users
  User.where {
    month(dateOfBirth) == m && day(dateOfBirth) == _day
  }
}

@Transactional(readOnly = true)
def listBirthdayToday() {
  def cal = Calendar.getInstance()
  listBirthday(cal.get(cal.MONTH), cal.get(cal.DAY_OF_MONTH))
}

除了monthday还有一些其他功能,here是文档(找“其他功能”)

【讨论】:

    【解决方案2】:

    任何想法如何使用 GORM 做一个别名(SELECT field AS alias)?

    (SELECT field AS _alias)
    

    使用 grails-2.5.6 将下划线 (_) 作为别名的前缀对我有用

    我没有在文档中找到它,而是使用跟踪和错误方法。

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2011-12-08
      • 2013-11-13
      相关资源
      最近更新 更多