1

使用 Grails 我正在尝试像这样的动态查找器

Policy.findAllByResourceAndUser(resource,user)

但是当我调用这个时,grails 会引发这个异常

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: object references
an unsaved transient instance - save the transient instance before flushing: gmedia.User;
nested exception is org.hibernate.TransientObjectException: object references an unsaved
transient instance - save the transient instance before flushing: gmedia.User

我们需要保存finder的参数吗?我哪里错了?

4

3 回答 3

0

http://www.grails.org/DomainClass+Dynamic+Methods#findAllBy *

Policy.findAllByResourceAndUser(资源,用户)

“By”中的大写“B”是我首先看到的错误吗?那是问题的类型吗?

 def res = new Resource(name:"resource name").save()
 def user = new User(name:"My Name").save()
 def policy = new Policy( user:user, resource:res, right: "right string").save()

 println Policy.findAllByResourceAndUser(res,user)

不优雅,但你明白了,你保存对象的方式一定有问题

您的用户对象将“永远”与该代码一起保存...您必须为所有属性指定值或适当地定义约束。我认为您应该查看 Grails 中域对象的文档,因为您的方法似乎存在基本问题,请参阅http://www.grails.org/GORM+-+Creating+a+domain+class

于 2010-09-06T20:29:04.813 回答
0

@Aaron Saunders 这是两个域类

class Resource{
static contraints={}
}

class User extends Resource{
  String name
  String password
  String email
  Date creationDate
  Date lastModicationDate
}

class Policy{
Resource resource
User user
String right
static mapping={
  user cascade:'all-delete-orpahn'
  resource cascade:'all-delete-orpahn'
}

也许这是用户和资源之间继承的结果

于 2010-09-06T21:10:31.560 回答
0

我今天遇到了同样的问题..我找到了解决方案...有一个外键关系被设置为 NULL ......所以当它试图保存 null 时它会抛出这个异常..所以确保所有值不为空...否则您可能需要更改您的映射 xml 中的级联定义..

于 2012-10-31T18:21:28.977 回答