Why is it necessary to specify a name when using the @Table annotation (I guess it's the same using Yaml or XML) when I just want to add some indexes or unique constraints? When I do not specify the @Table at all, the name is generated from the entity's class, why can't it be also generated when I just want to add indexes or uniqueConstraints? My point is why should I write so many same stuff so many times, when Doctrine can already use it's API to do it for me. Preferably I would like to only specify the name when I need to change it from the default, not every time I need to add some explicit indexes The same applies to the @JoinColumn annotation. When I want a nullable=false column, I have (again) specify a name for it, but the generated name would work just fine. Why do I have to specify it by hand?