abryzakez opened a new issue, #14625:
URL: https://github.com/apache/grails-core/issues/14625

   The documentation at 
http://gorm.grails.org/latest/hibernate/manual/index.html#_many_to_many_mapping 
shows how to change the column name & join table for a many-to-many 
relationship by creating a mapping in both classes:
   ```groovy
   class Group {
      ...
      static mapping = {
          people column: 'Group_Person_Id',
                 joinTable: 'PERSON_GROUP_ASSOCIATIONS'
      }
   }
   class Person {
      ...
      static mapping = {
          groups column: 'Group_Group_Id',
                 joinTable: 'PERSON_GROUP_ASSOCIATIONS'
      }
   }
   ```
   
   This documentation seems to show that the `column` should be the ID of the 
other class, but it appears that it is the ID of the current class. I created a 
test to demonstrate this.
   
   ```groovy
   class A {
       Long id
       String value
   
       static hasMany = [
               b: B,
       ]
       static mapping = {
           id generator: 'assigned'
           b column: 'B_ID', joinTable: 'A_B'
       }
   
       static def allJoins() {
           def result
           withSession { session ->
               def q = session.createSQLQuery("SELECT A_ID, B_ID FROM A_B")
               result = q.list()
           }
           return result
       }
   }
   ```
   
   ```groovy
   class B {
       Long id
       String value
   
       static belongsTo = A
       static hasMany = [
               a: A,
       ]
   
       static mapping = {
           id generator: 'assigned'
           a column: 'A_ID', joinTable: 'A_B'
       }
   }
   ```
   
   ```groovy
   import grails.test.mixin.integration.Integration
   import grails.transaction.Rollback
   import spock.lang.Specification
   
   @Integration
   @Rollback
   class ABSpec extends Specification {
       void "ab join columns"() {
           given:
           def a1 = new A(value: 'A1')
           a1.id = 101
           a1.save()
           def b1 = new B(value: 'B1')
           b1.id = 201
           b1.save()
           a1.addToB(b1)
           a1.save(flush: true)
   
           expect:
           A.allJoins() == [[101, 201]]
       }
   }
   ```
   
   This test fails with the IDs in the incorrect order (the result is 
`[[201,101]]`)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to