Après avoir expérimenté un peu plus, j'ai trouvé la réponse.
Le mot "NON SIGNÉ" devrait venir après "TINYINT" au lieu d'avant. Le champ doit être défini comme suit :
@Size(max = 3)
@Column(name = "WorkingHours", columnDefinition="TINYINT(3) UNSIGNED default '40'")
private Integer workingHours;
Je ne sais pas pourquoi, je ne l'ai découvert que par essais et erreurs. Peut-être que quelqu'un d'autre peut fournir une référence pour expliquer pourquoi.