【问题标题】:org.springframework.dao.InvalidDataAccessApiUsageException when using grails dynamic finder使用 grails 动态查找器时出现 org.springframework.dao.InvalidDataAccessApiUsageException
【发布时间】:2010-09-06 19:47:09
【问题描述】:

使用 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的参数吗? 我哪里错了?

【问题讨论】:

  • 需要查看其他代码,特别是“资源”和“用户”值的来源

标签: grails save finder


【解决方案1】:

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

Policy.findAllByResourceAndUser(resource,user)

“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

【讨论】:

  • 抱歉,只是打字错误。实际代码输入正确。我将编辑问题文本。
  • 看起来你还没有保存/刷新用户对象。我写了一个测试用例,代码运行良好
  • 事实上我尝试做一个 findAll... 在一个我应该找不到策略的地方(用于测试目的)
  • @BenZen 不太明白你的评论
  • 我也做了一个测试用例。引发此异常的测试,资源已保存,用户已保存,但策略不存在。另外,没有资源。有问题吗?
【解决方案2】:

@亚伦桑德斯 这是两个域类

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'
}

可能是用户和资源之间继承的结果

【讨论】:

  • 策略域对象在哪里?
  • 完全不相关,但你的约束块必须像映射块一样是静态的,否则会被忽略。
【解决方案3】:

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

【讨论】:

  • 错误消息已经表明这不是外键约束问题,而是涉及瞬态字段的问题 - 在这种情况下,DAO 代码会给出不同的错误。
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2015-08-20
相关资源
最近更新 更多