@@ -326,3 +326,60 @@ func TestEmbeddedTagSetting(t *testing.T) {
326326 t .Errorf ("embedded struct's primary field should be rewritten" )
327327 }
328328}
329+
330+ func TestZeroValueEmbeddedStruct (t * testing.T ) {
331+ type Address struct {
332+ City string
333+ State string
334+ }
335+ type UserWithAddress struct {
336+ ID uint
337+ Address Address `gorm:"embedded"`
338+ }
339+
340+ DB .Migrator ().DropTable (& UserWithAddress {})
341+ err := DB .Migrator ().AutoMigrate (& UserWithAddress {})
342+ tests .AssertEqual (t , err , nil )
343+
344+ user := UserWithAddress {}
345+ err = DB .Save (& user ).Error
346+ tests .AssertEqual (t , err , nil )
347+
348+ var loaded UserWithAddress
349+ err = DB .First (& loaded , user .ID ).Error
350+ tests .AssertEqual (t , err , nil )
351+
352+ if loaded .Address .City != "" || loaded .Address .State != "" {
353+ t .Errorf ("expected zero values for embedded struct fields, got: %+v" , loaded .Address )
354+ }
355+ }
356+
357+ func TestUpdateEmbeddedFields (t * testing.T ) {
358+ type Address struct {
359+ City string
360+ State string
361+ }
362+ type UserWithAddress struct {
363+ ID uint
364+ Address Address `gorm:"embedded"`
365+ }
366+
367+ DB .Migrator ().DropTable (& UserWithAddress {})
368+ err := DB .Migrator ().AutoMigrate (& UserWithAddress {})
369+ tests .AssertEqual (t , err , nil )
370+
371+ user := UserWithAddress {Address : Address {City : "Austin" , State : "TX" }}
372+ err = DB .Save (& user ).Error
373+ tests .AssertEqual (t , err , nil )
374+
375+ err = DB .Model (& user ).Updates (UserWithAddress {Address : Address {City : "Houston" }}).Error
376+ tests .AssertEqual (t , err , nil )
377+
378+ var loaded UserWithAddress
379+ err = DB .First (& loaded , user .ID ).Error
380+ tests .AssertEqual (t , err , nil )
381+
382+ if loaded .Address .City != "Houston" {
383+ t .Errorf ("embedded field not updated: expected Houston, got %s" , loaded .Address .City )
384+ }
385+ }
0 commit comments