Julian Nagelsmann made four changes to the team that fought back to claim a 3-3 draw in Dortmund last time out. Shot-stopper Oliver Baumann was protected by a back three in which the fit-again Kevin Vogt and Kasim Adams, who replaced the injured duo of Benjamin Hübner and Ermin Bicakcic, lined up alongside Stefan Posch. Wing-backs Pavel Kaderabek and Nico Schulz retained their places.
Nadiem Amiri replaced the suspended Florian Grillitsch in midfield, where he played alongside Kerem Demirbay and Joelinton. Ishak Belfodil, who scored two goals in Dortmund, kept his place in the starting XI and formed a strike partnership with Andrej Kramaric.
Vogt moved forward into a defensive midfield role when Hannover had the ball, but took up the central position in the back three when Hoffenheim had possession.
TSG made their first change of the match in the 74th minute, with goalscorer Joelinton making way for Leonardo Bittencourt. The second switch followed five minutes later as Adam Szalai replaced Kramaric in attack. With five minutes to go before the final whistle, Nagelsmann withdrew Belfodil and handed David Otto his Bundesliga debut.
Moment of the match:
The 85th minute: David Otto came on for Ishak Belfodil and made his Bundesliga debut for TSG.
Number of the game: 10
The 3-0 win saw TSG extend their unbeaten home run against Hannover 96 to 10 matches. "Hoffe" now have eight wins and two draws from their meetings with the 96ers in Sinsheim.
What a start! TSG break quickly following a Hannover corner. Kramaric plays the ball into the opposition half and Joelinton pounces on a misplaced header by Korb before nutmegging shot-stopper Esser.
TSG are awarded a free-kick in a centre-left position. Demirbay whips a cross into the penalty area towards Belfodil, who outjumps his opponents and heads the ball into the goal off the underside of the crossbar.
Kramaric again gets on the ball on the left flank and again causes problems for his opponents with a cross that misses an unmarked Kaderabek by a matter of centimetres. Seconds later, Belfodil wins the ball back in the Hannover penalty area and shoots narrowly wide of the upright.
Demirbay intercepts a pass into the middle of the park and lets fly with his left boot from around 30 metres out. His shot crashes against the crossbar and back into play. Esser was well and truly beaten there.
The second half almost gets off to an equally electrifying start for TSG. Amiri wins the ball and threads it brilliantly through to Joelinton, who goes for goal but fires narrowly wide with the outside of his boot.
Kaderabek fizzes in a cross towards the back post, where Belfodil beats his marker in an aerial battle and heads the ball goalbound. But Esser makes a fingertip save to claw the ball off the line.
TSG are creating one chance after another. First, Schulz does well down the left flank and has a shot, but Esser makes the save and turns the ball against the crossbar. Amiri almost slots the follow-up into an empty net but a Hannover player manages to clear his shot off the line.
Schulz goes clean through on Esser again but the Germany international again loses the one-on-one. The loose ball again falls to a TSG player, but Joelinton fires the ball over the goal.
TSG finally get the third goal when Nico Schulz squares the ball to Kerem Demirbay and the midfielder hits a left-footed shot into the bottom corner from 16 metres out.