代码之家  ›  专栏  ›  技术社区  ›  benzen

org.springframework.dao网站.InvalidDataAccessApiUsageException在使用grails dynamic finder时

  •  1
  • benzen  · 技术社区  · 15 年前

    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的参数吗?

    3 回复  |  直到 15 年前
        1
  •  0
  •   Aaron Saunders    15 年前

    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

        2
  •  0
  •   benzen    15 年前

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

    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
  •  0
  •   Anand    13 年前

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

    推荐文章