org.springframework.dao.InvalidDataAccessApiUsageException при использовании динамического поиска Grails - PullRequest
1 голос
/ 06 сентября 2010

Используя Grails, я пытаюсь найти такой динамический искатель, как этот

Policy.findAllByResourceAndUser(resource,user)

Но когда я это называю, Граальс поднимает это исключение

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 голосов
/ 07 сентября 2010

@ Аарон Сондерс: это два класса домена

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

Может быть, это следствие наследования между пользователем и ресурсом

0 голосов
/ 31 октября 2012

я столкнулся с той же проблемой сегодня .. я нашел решение ... есть отношение внешнего ключа, которое устанавливается как NULL ..... поэтому, когда он пытается сохранить ноль, он выдает это исключение ... уверен, что все значения не равны NULL ... иначе вам может понадобиться изменить определение каскада в ur mapping xml ..

0 голосов
/ 07 сентября 2010

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

Policy.findAllByResourceAndUser (resource, user)

заглавная "B" в "By" - первое, что я вижу неправильно?Это тип вопроса?

 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

...