Bayern’s run came to an end a week before their mouth-watering Champions League home leg quarter-final against Real Madrid.
This was Bayern’s first loss since going down 3-2 at Russia’s Rostov in a Champions League group game last November. It was also only their second defeat in 27 German league games having also stumbled at Borussia Dortmund, but they still hold a 13-point lead in the table.
“Of course, we shouldn’t have allowed that to happen,” fumed Bayern’s captain-for-the-night Arjen Robben.
“It was better in the second half, but the ball wouldn’t go in.
“Our lead (in the table) is still big, but that was an unnecessary defeat.”
Second-placed RB Leipzig can now trim Bayern’s massive lead at Mainz on Wednesday.
This was Hoffenheim’s first win over Bayern at the 18th attempt.
Having earned a 1-1 draw in Munich last November, this is another feather in the cap for Hoffenheim’s 29-year-old coach Julian Nagelsmann.
“It always sounds good to beat Bayern, we went close in the first match, it was a good bit of work for us,” said Nagelsmann, Germany’s coach of the year for 2016.
“Kramaric had a great game, he scored with the worse chance in the first half for us.
“I said we had to be brave, which we had, but we also played the better football.”
With a busy run of fixtures approaching, Bayern coach Carlo Ancelotti rotated his squad, but still started with 10 internationals. Bayern host Dortmund in the Bundesliga on Saturday, then Real next Wednesday.
With Germany goalkeeper Manuel Neuer recovering from minor foot surgery, reserve shot-stopper Sven Ulreich, the only uncapped player in the starting team, again deputised.
Captain Philipp Lahm, Jerome Boateng and Franck Ribery started on the bench. Playmaker Thiago Alcantara was rested while Thomas Mueller was sidelined by an ankle injury.
Hoffenheim took advantage of Bayern’s changes by dominating the opening half and took a deserved lead on 21 minutes.
A poor clearance from Bayern defender Mats Hummels was snapped up by ex-Leicester City striker Kramaric who slammed his shot past Ulreich.
Bayern’s striker Robert Lewandowski hit the crossbar just before the break after Kingsley Coman whipped in a cross.
With time running out, Lewandowski forced Hoffenheim goalkeeper Oliver Baumann into a superb diving save as they hunted the equaliser.
Hoffenheim strengthen their hold on third place and are set to make their Champions League debut next season.
Tuchel defends Aubameyang after mask fiasco
Pierre-Emerick Aubameyang’s recent mask-wearing exploits landed him in hot water with Borussia Dortmund’s bosses, but his coach Thomas Tuchel has leapt to the defence of the Gabon hot-shot.
“Such a sensitive human being like Auba is affected when so much is said and written about him - even if he has himself to blame,” said Tuchel. “The goal in this situation, with it’s background, was very important for us and Auba.”
The goal Tuchel refered to was Aubameyang’s 25th in as many league matches which sealed Tuesday’s 3-0 win over Hamburg to make him the Bundesliga top-scorer, one ahead of Bayern Munich’s Robert Lewandowski.
Tuchel made Aubameyang captain for the night against Hamburg with regular skipper Marcel Schmelzer injured.
The striker set up Shinji Kagawa for Dortmund’s second, then netted his own goal just before the final whistle with an ice-cold finish after rounding Hamburg’s goalkeeper.
Being handed the captain’s armband was a show of faith after Dortmund’s goal machine once again fell offside with Borussia’s senior bosses on Saturday -- the “situation” and “background” Tuchel was referring to.
He donned a red-and-orange wrestling mask for his goal celebration in the 1-1 Ruhr derby draw at Schalke.
The problem is sportswear giants Puma own a five percent share in Dortmund and Aubameyang wore the same mask in an advert for private sponsor Nike.
Puma has called on Dortmund to take action, especially after Aubameyang had the Nike logo shaved into his hair last month -- which had already landed him in trouble with Borussia’s CEO Hans-Joachim Watzke.
To make matters worse, Aubameyang picked up a yellow card in Gelsenkirchen for his masked celebration -- his third of the season - and two more would see him banned for one league match.
The flamboyant striker has donned masks in the past to celebrate goals -- a spiderman headpiece in 2014 and a Batman one in 2015.
- Schmelzer criticism -
But while the superhero masks can be excused as harmless fun, the Nike one is part of a clear marketing strategy and German daily Bild claims the club will fine Aubameyang at least 50,000 euros ($53,317).
His team-mates are also not amused by the off-field disruption the mask caused ahead of next Tuesday’s Champions League quarter-final first leg at home to Monaco and Saturday’s Bundesliga clash at leaders Bayern Munich.
“We thought within the team that he’d come up with something for the derby, but the way it happened is, of course, stupid. No one had a clue,” Dortmund captain Marcel Schmelzer told German daily Bild.
“We had already spoken to him, the club will talk to him once more and make it clear internally. Auba is already aware.
“We know what we have in him and he knows what he has with us.
“It’s important that we don’t lose the ‘we’ feeling and Auba knows that - 100 percent,” Schmelzer added.
Dortmund were in grave danger of conceding an equaliser against Hamburg on Tuesday until Aubameyang helped turn the game with an assist for Kagawa on 81 minutes before his injury time goal.
“I’m torn in how to sum up the game,” said Tuchel.
“We had many clear chances, but also played negligently - it was a rollercoaster ride.”