Grails学习笔记之GORM

1.关联查询
假设有以下领域对象:
class Account{
	Transaction transaction
	Date created
}

class Transaction{
	Date date
}

def c = Account.createCriteria()
def now = new Date()
def results = c.list {
       transaction {//查询关联的属性
           between('date',now-10, now)
       }
       eq("transaction.id", 1 as Long)//如果是关联的id可以这样查询(many to one / one to one)
}


def c = Account.createCriteria()
def now = new Date()
def results = c.list {
       eq("transaction.date", new Date())//运行时出错,关联除id外的属性不能这样查询
}


2.批量查询关联
batchSize: N,N是指查询关联的个数,而不是关联元素个数(当关联为集合时)。
class Person {
    String firstName
    Pet pet
    static mapping = {
        pet batchSize: 5//假如我们查询二十个Person对象,在第一次使用到pet时会一次查询出5个pet,对于集合的联系也是如此。
    }
}

class Account{
	static hasMany = [transactions:Transaction]
	//Transaction transaction
	Date created

	static mapping = {
        transactions batchSize: 4
    }
}
class Transaction{
	static belongsTo = [account:Account]
	Date date
}

def c = Account.createCriteria()

def results = c.list {
}

results.each {
    println it.transactions
}

在这里会查询出4个transactions集合,SQL语句有可能是:
		select
        this_.id as id78_0_,
        this_.version as version78_0_,
        this_.created as created78_0_ 
    from
        account this_

    select
        transactio0_.account_id as account3_1_,
        transactio0_.id as id1_,
        transactio0_.id as id81_0_,
        transactio0_.version as version81_0_,
        transactio0_.account_id as account3_81_0_,
        transactio0_.date as date81_0_ 
    from
        transaction transactio0_ 
    where
        transactio0_.account_id in (
            ?, ?, ?, ?
        )

3.约束
Grails的属性(包括many to one / one to one的关联)默认是不为空的

猜你喜欢

转载自dean-liu.iteye.com/blog/1767201
今日推荐