2010-09-06 5 views
1

Utilisation de Grails J'essaie un chercheur dynamique comme celui-ciorg.springframework.dao.InvalidDataAccessApiUsageException lors de l'utilisation Grails finder dynamique

Policy.findAllByResourceAndUser(resource,user) 

Mais quand j'appelle cela, Grails déclencher cette exception

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 

Avons-nous besoin de sauvegarder le paramètre du finder? Où est-ce que je me trompe?

+0

besoin de voir du code supplémentaire, en particulier lorsque les valeurs "resource" et "user" proviennent de –

Répondre

0

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

Policy.findAllByResourceAndUser (ressource, utilisateur)

capitale "B" dans "Par" est la première chose que je vois mal? Est-ce un type sur la question?

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) 

pas élégant, mais vous avez l'idée, il doit y avoir un problème dans la façon dont vous enregistrez vos objets

votre objet utilisateur « jamais » être sauvé avec ce code ... vous avez pour spécifier des valeurs pour toutes vos propriétés ou définir vos contraintes de manière appropriée. Je pense que vous devriez consulter la documentation pour les objets de domaine dans Grails, car il semble y avoir des problèmes fondamentaux dans votre approche voient http://www.grails.org/GORM+-+Creating+a+domain+class

+0

désolé, juste une erreur de frappe. Le code réel a été correctement tapé. Je vais modifier le texte de la question. – benzen

+0

semble que vous n'avez pas enregistré/vidangé l'objet utilisateur .. J'ai écrit un cas de test et le code fonctionne bien –

+0

En fait, j'essaie de faire un findAll ... à un point où je ne trouve aucune politique (à des fins de test) – benzen

0

@ Aaron Saunders ce sont deux classes de domaine

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

Peut-être une conséquence de la héritage entre l'utilisateur et la ressource

+0

où est l'objet de domaine de politique? –

+0

Complètement sans rapport, mais votre bloc de contraintes doit être statique comme le bloc de mappage, sinon il sera ignoré. –

0

J'ai fait face au même problème aujourd'hui..je trouve la solution ... il y a une relation de clé étrangère qui est définie comme NULL ..... alors quand elle essaye de sauver la valeur null elle jette cette exception ... assurez-vous que toutes les valeurs ne sont pas nulles ... sinon vous ma y faut changer la définition de cascade dans ur mapping xml ..

+0

Le message d'erreur indique déjà qu'il ne s'agit pas d'un problème de contrainte de clé étrangère, mais d'un problème impliquant des champs transitoires - le code DAO donnerait une erreur différente dans un tel cas. – Gijs

Questions connexes