使用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
我们需要保存取景器的参数吗? 哪里我错了?
答案 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)
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中的级联定义..