grails 冷门问题汇总(持续更新中…)
一、遇到domain对象内置的findById方法在service中使用查询不到相对应Id的对象,例如
def update(Book book){
//这里book为前台修改的book对象
Book bookTemp = Book.findById(book.id);
}
解决办法:
这里的bookTemp不是对应id的对象,遇到这样的问题是没有在service类上加上@Transactional 注解导致的,根本原因现不明…
二、创建groovy源码类后,引用不了该类
解决办法:
创建源码类时,需要先创建一个directory的文件夹,然后将文件夹转化成源码(即右键点击文件夹后选择make directory as sources root )然后需要在该文件夹下创建一个package(特别强调:此时不能直接创建groovy类,否则会引用不到),在package中再创建自己的groovy类,这样grails就能引入该类了(结论,grails只能正确识别源码文件夹下package中的源码文件类)
三、创建domain时,如果改domain对象没有Id主键,则在使用时会报错
解决办法:
grails默认会约定所有domain,即所有表带有id主键,这应该也是数据库设计所必须的,只有存在一些关系表时才不会带Id,比如用户角色关系表,这时如果需要查询用户所拥有的角色,是无法直接使用用户角色关系表domain去查询的,此时可以在user表中添加如下代码:
class User {
static constraints = {
}
static mapping = {
table 'user'
roles column: 'user_id', joinTable: 'user_role_r'
}
这样就能使用 user.roles拉出所有角色列表