Comme je suis un peu nouveau à Grails, je me demande comment je peux parcourir les données actuelles que j'ai enregistrées dans la base de données pour vérifier si les informations existent déjà. Par exemple, disons que j'ai une classe de domaine pour Livres et que je crée une action qui ajoute automatiquement plus de livres mais je veux vérifier si le livre.title existe déjà, donc je ne l'ajoute pas à nouveau.Grails itérant à travers les tables de base de données
Note Side Je suis juste en utilisant la base de données par défaut (tout ce qui est utilisé lorsque le projet est réglé sur le mode de production)
Modifier
Je posterai mes domaines donc c'est un peu plus facile à comprendre. Au lieu de book.title, je l'ai changé à l'endroit où le livre appartient à l'auteur. Donc je veux seulement que l'auteur soit ajouté une fois mais capable d'ajouter beaucoup de livres pour cela. Le problème se produit dans une action que j'ai créée dans le contrôleur.
Auteur Domaine:
class Author {
static hasMany = [books:Book]
String authorName
String notes
String age
String toString() { authorName }
static constraints = {
authorName()
notes(maxSize:500)
age()
}
}
Livre Domaine:
class Book {
static belongsTo = Author
String toString() { bookNumber }
Author bookAuthor
String title
String numberOfPages
static constraints = {
bookAuthor()
title()
numberOfPages()
}
}
Controller Book (c'est là que je vais avoir des problèmes):
class BookController {
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
//took out index, create, list, etc. to focus on the once that I'm concerned about
//this action will simple read a text file and add books and authors
def gather = {
def parseData = new parseClient() //parses text file line by line and puts it into a list
def dataHolder = parseData.information //dataHolder will hold data from text file
int linesOfData = dataHolder.size() //get size to iterate and add authors & books
linesOfData.times {
def _author = dataHolder.author[it] //get author - Author
def _age = dataHolder.age[it] //get age - Author
def _title = dataHolder.title[it] //get title - Book
def _pages = dataHolder.pages[it] //get pages - Book
def authorInstance //create new Author to add
authorInstance = new Author() //for some reason I have to create and save AuthorName (can't have other fields) before I can add my Book correctly
authorInstance.setAuthorName(_author)
authorInstance.save()
def bookInstance
bookInstance = new Book() //create a new Book to add
bookInstance.setBookAuthor(authorInstance)
bookInstance.setTitle(_title)
bookInstance.setNumberOfPages(_pages)
bookInstance.save() //has to have access to the authorInstance to add correctly which is why i was wondering how to access the database to grab it if it existed
authorInstance.setAge(_age) //add whatever data is left for Author
authorInstance.save() //save again because cant save it with this information before I add authorInstance to the Book
}
}
}
Texte Contenu du fichier:
//You'll notice that author _Scott Davis_ is in here twice.
//I don't want to add two instances of Scott Davis but need to access it to add the book
//the unique constraint makes the value come up as not null but can't be added
Scott Davis : Groovy Recipes
Bashar Abdul Jawad : Groovy and Grails Recipes
Fergal Dearle : Groovy for Domain-Specific Languages
Scott Davis : GIS for Web Developers: Adding 'Where' to Your Web Applications
Je suis à la recherche essentiellement un moyen d'ajouter cette information et n'ont pas trouvé un moyen qui semble fonctionner sans se heurter à des problèmes aléatoires.
Hope this efface ma question un peu, comme la question initiale était un peu large
Merci pour les hvgotcodes d'aide, la contrainte unique fonctionnerait, mais je compris que J'ai des problèmes en ajoutant. Je vais éditer mon post original sous peu avec le problème mis à jour. – StartingGroovy
Juste pensé que je voudrais vous faire savoir que j'ai mis à jour le post principal avec la question plus spécifique. – StartingGroovy
1. Peut-être que je comprends mal votre numéro 1, mais cela fonctionne très bien lors de l'ouverture du site Web et la création de l'auteur ou du livre manuellement. Les setters que j'ai sont pour quand je lis un fichier et que je veux pousser les informations du fichier directement sans avoir à les taper. J'ai dû diviser authorInstance en deux parce que bookInstance ne créera pas s'il y a d'autres parties de info dedans. – StartingGroovy