Playing for the St. Louis Cardinals (1924-1931) and Cincinnati Reds (1932-1935, 1937), Hafey was known strong line-drive hitter and batted for a high average on a consistent basis. Hafey also showed some power, averaging 27 home runs and 114 RBI from 1928 to 1930. He won the batting title in 1931 with a .349 clip and was considered for the MVP award.
On April 11, 1932 Hafey was traded to the Cincinnati Reds, where his career faltered. Although he continued to bat for a solid average, his production numbers fell flat. He missed most of 1935, all of 1936 and retired after a tepid 1937 season.