diff --git a/README.md b/README.md index 9c0aded0..a3eabe39 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The fantastic ORM library for Golang, aims to be developer friendly. * Hooks (Before/After Create/Save/Update/Delete/Find) * Eager loading with `Preload`, `Joins` * Transactions, Nested Transactions, Save Point, RollbackTo to Saved Point -* Context, Prepared Statment Mode, DryRun Mode +* Context, Prepared Statement Mode, DryRun Mode * Batch Insert, FindInBatches, Find To Map * SQL Builder, Upsert, Locking, Optimizer/Index/Comment Hints, NamedArg, Search/Update/Create with SQL Expr * Composite Primary Key diff --git a/association.go b/association.go index 4c55c7e1..3a2942fd 100644 --- a/association.go +++ b/association.go @@ -385,7 +385,9 @@ func (association *Association) saveAssociation(clear bool, values ...interface{ for name, ok := range selectColumns { columnName := "" if strings.HasPrefix(name, association.Relationship.Name) { - columnName = strings.TrimPrefix(name, association.Relationship.Name) + if columnName = strings.TrimPrefix(name, association.Relationship.Name); columnName == ".*" { + columnName = name + } } else if strings.HasPrefix(name, clause.Associations) { columnName = name } @@ -404,7 +406,15 @@ func (association *Association) saveAssociation(clear bool, values ...interface{ selectedSaveColumns = append(selectedSaveColumns, ref.ForeignKey.Name) } } - associationDB := association.DB.Session(&Session{}).Model(nil).Select(selectedSaveColumns).Session(&Session{}) + + associationDB := association.DB.Session(&Session{}).Model(nil) + if !association.DB.FullSaveAssociations { + associationDB.Select(selectedSaveColumns) + } + if len(omitColumns) > 0 { + associationDB.Omit(omitColumns...) + } + associationDB = associationDB.Session(&Session{}) switch reflectValue.Kind() { case reflect.Slice, reflect.Array: diff --git a/callbacks/query.go b/callbacks/query.go index fff46d57..05b572f0 100644 --- a/callbacks/query.go +++ b/callbacks/query.go @@ -172,7 +172,7 @@ func Preload(db *gorm.DB) { if name == clause.Associations { for _, rel := range db.Statement.Schema.Relationships.Relations { if rel.Schema == db.Statement.Schema { - preloadMap[rel.Name] = nil + preloadMap[rel.Name] = map[string][]interface{}{} } } } else { diff --git a/gorm.go b/gorm.go index 88885407..1109e8cd 100644 --- a/gorm.go +++ b/gorm.go @@ -167,7 +167,6 @@ func (db *DB) Session(config *Session) *DB { clone: 1, } ) - if config.CreateBatchSize > 0 { tx.Config.CreateBatchSize = config.CreateBatchSize }