使用grails动态查找器时org.springframework.dao.InvalidDataAccessApiUsageException

时间:2010-09-06 19:47:09

标签: grails save finder

使用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

我们需要保存取景器的参数吗? 哪里我错了?

3 个答案:

答案 0 :(得分: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中Domain Objects的文档,因为您的方法中存在基本问题,请参阅http://www.grails.org/GORM+-+Creating+a+domain+class

答案 1 :(得分: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'
}

可能是User和Resource

之间继承的结果

答案 2 :(得分:0)

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