diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb
index <HASH>..<HASH> 100644
--- a/activerecord/lib/active_record/associations.rb
+++ b/activerecord/lib/active_record/associations.rb
@@ -1827,7 +1827,7 @@ module ActiveRecord
 
           builder = Builder::HasAndBelongsToMany.new name, self, options
 
-          join_model = builder.through_model
+          join_model = ActiveSupport::Deprecation.silence { builder.through_model }
 
           const_set join_model.name, join_model
           private_constant join_model.name
@@ -1856,7 +1856,7 @@ module ActiveRecord
             hm_options[k] = options[k] if options.key? k
           end
 
-          has_many name, scope, hm_options, &extension
+          ActiveSupport::Deprecation.silence { has_many name, scope, hm_options, &extension }
           _reflections[name.to_s].parent_reflection = habtm_reflection
         end
       end
Suppress deprecation message to `has_and_belongs_to_many` only once

Passing a class to `has_and_belongs_to_many` show deprecation message
three times. It is enough only once.