Sto progettando un sistema in cui i post/discussioni tra utenti possono essere aggiornati per diventare ticket. In un determinato luogo sto cercando di creare una relazione opzionale one-to-one ma sto incontrando alcuni problemi. Di seguito è riportata una versione condensata delle entità sotto i riflettori.Grails/GORM: creazione della relazione opzionale uno-a-uno
Regole:
- Un Post può diventare un biglietto, se necessario. (opzionale)
- Un biglietto deve avere un post. (Obbligatorio)
Post.groovy
class Post {
String title
String description
String postedBy
Ticket ticket
static hasMany = [comments: Comment]
static constraints = {
title(blank:false)
description(blank:false)
postedBy(blank:false)
ticket (nullable:true,unique:true)
}
}
Ticket.groovy
class Ticket {
String title
String description
String postedBy
Post post
static hasMany = [responses: Response]
static constraints = {
title(blank:false)
description(blank:false)
postedBy(blank:false)
post (nullable:false,unique:true)
}
}
Questo funziona in una certa misura. Posso:
- creare un post lasciando il biglietto attributo null Se e quando il posto viene aggiornato a diventare un biglietto
- posso impostare in modo esplicito l'attributo biglietto del Post per puntare al biglietto di genitore.
Tuttavia, questa mappatura non viene applicata a livello di dominio. Lascia spazio per una situazione in cui Ticket1 punta a Post1, ma Post1 punta invece a Ticket2.
Ho provato ad utilizzare un static hasOne = [post: Post]
nel biglietteria classe, ma poi appreso che essa impone la presenza di un static belongsTo = [ticket: Ticket]
nel Post classe e questo diventa un obbligo rapporto 1 a 1, che non è quello che sto cercando.
C'è un modo per ottenere questa mappatura opzionale 1-a-1 in questo scenario? Qualsiasi suggerimento sarebbe molto utile.
Si prega di chiudere la domanda, se è la risposta alla vostra soddisfazione. Grazie! :-) – sbglasius
Non funziona. Non penso che l'1-1 possa essere creato. Probabilmente dovrei chiuderlo come senza risposta? –