grails hibernate查询在集成测试中不起作用

时间:2017-04-25 13:28:12

标签: hibernate grails dns integration-testing

我有以下域类:

package gcbgb

class Score {
    Double victoryPoints

    static belongsTo = [ player:Player, gameTable:GameTable ]

    static constraints = {
        victoryPoints nullable:true
    }
}

表示在特定victoryPoints玩游戏时收到的Player特定GameTable的数量。

我也有服务:

package gcbgb

import grails.transaction.Transactional

@Transactional class RoundService {

    int tableRank(Score score) {
        return Score.findAll("from Score as s where s.gameTable = ? and s.victoryPoints >= ?", [score.gameTable, score.victoryPoints]).size()
    }

}

根据所获得的Player's与其他GameTable相比,victoryPoints的某个Players等级有助于确定每个package gcbgb import grails.test.mixin.integration.Integration import grails.test.mixin.TestFor import grails.transaction.* import spock.lang.* @Integration @Rollback @TestFor(RoundService) class RoundServiceSpec extends Specification { def setup() { } def cleanup() { } void "test tableRank"() { def player6 = new Player(name:"Player6").save(failOnError:true) def player5 = new Player(name:"Player5").save(failOnError:true) def player4 = new Player(name:"Player4").save(failOnError:true) def player3 = new Player(name:"Player3").save(failOnError:true) def player2 = new Player(name:"Player2").save(failOnError:true) def player1 = new Player(name:"Player1").save(failOnError:true) Round round1 = new Round(number:1, duration:"1.5").save(failOnError:true) GameTable gameTable1 = new GameTable(gameName:"Game1") round1.addToGameTables(gameTable1) round1.save(failOnError:true) Score score1 = Score.link(gameTable1, player1).setVictoryPoints(4).save(failOnError:true) Score score2 = Score.link(gameTable1, player2).setVictoryPoints(3).save(failOnError:true) Score score3 = Score.link(gameTable1, player3).setVictoryPoints(3).save(failOnError:true) Score score4 = Score.link(gameTable1, player4).setVictoryPoints(2).save(failOnError:true) Score score5 = Score.link(gameTable1, player5).setVictoryPoints(1).save(failOnError:true) expect: 1 == service.tableRank(score1) 3 == service.tableRank(score2) 3 == service.tableRank(score3) 4 == service.tableRank(score4) 5 == service.tableRank(score5) } } 等级。

当然,我也有这个功能的集成测试:

<testcase name="test tableRank" classname="gcbgb.RoundServiceSpec" time="8.329"><failure message="org.hibernate.QueryException: could not resolve property: victoryPoints of: gcbgb.Score" type="org.hibernate.QueryException">org.hibernate.QueryException: could not resolve property: victoryPoints of: gcbgb.Score
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:62)
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:56)
    at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1831)
    at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:46)
    at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1806)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:510)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:525)
    at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:66)
    at org.hibernate.criterion.Junction.toSqlString(Junction.java:84)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:400)
    at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:106)
    at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:75)
    at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:80)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1773)
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:363)
    at org.grails.orm.hibernate.query.AbstractHibernateCriteriaBuilder.invokeMethod(AbstractHibernateCriteriaBuilder.java:1687)
    at org.grails.orm.hibernate.query.AbstractHibernateCriteriaBuilder.list(AbstractHibernateCriteriaBuilder.java:1558)
    at gcbgb.RoundService.$tt__tableRank(RoundService.groovy:13)
    at gcbgb.RoundService.tableRank_closure2(RoundService.groovy)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.lang.Closure.call(Closure.java:430)
    at grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:96)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
    at grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:93)
    at gcbgb.RoundServiceSpec.$tt__$spock_feature_0_0(RoundServiceSpec.groovy:40)
    at gcbgb.RoundServiceSpec.test tableRank_closure3(RoundServiceSpec.groovy)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.lang.Closure.call(Closure.java:430)
    at grails.transaction.GrailsTransactionTemplate$1.doInTransaction(GrailsTransactionTemplate.groovy:70)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
    at grails.transaction.GrailsTransactionTemplate.executeAndRollback(GrailsTransactionTemplate.groovy:67)
    at gcbgb.RoundServiceSpec.test tableRank(RoundServiceSpec.groovy)
</failure></testcase>

然而,当我运行此测试时,我得到以下失败:

Score.victoryPoints

这表明我的$term_id =54 ; $term_children = get_term_children( $term_id, $taxonomy ); $term_id = array(); foreach ( $term_children as $child ) { $term = get_term_by( 'id', $child, $taxonomy ); $term_id[] = $term->term_id; //childern ids array. } 成员存在问题。

0 个答案:

没有答案