You can't do it like that.
In a one to many association, the foreign key is put into the "one" part.
Now from your example I understand that if person x is child of person y, that doesn't mean that person y is parent to person x? person x can have parents: person z and person t?
I will discuss first the case when person x can have only one parent and if x is child of y, then y is parent to x.
For this case, I would add a new column, parent_id with a default value of null and say only that hasMany [children: Person] and belongsTo [parent: Person]
This solve the case when one child can have only one parent.
For the other case, when one child can have multiple parents and not necessary being a child to someone makes that a parent for that child, are 2 options:
1. lists of ids in a db column (I do not like this in relational DB, but is acceptable in NoSQL)
2. connecting table(2). This can be one connecting table polymorphic, 2 connecting tables or one connecting tables with 3 columns and one will be always null.
Then you need to add belongsTo to the owning part. And set the mapping for the join table manually. something like:
static mapping = {
hasMany joinTable: [name: 'parent_child_connection',
key: 'person_id',
column: 'parent_id']
}