Evtl. willst Du Dir einmal bei Hibernate ansehen:
- Implicit Naming Strategy
- Physical Naming Strategy
Beides sind Wege, bei denen Du selbst vorgeben kannst, wie die Foreign Keys benannt werden sollen.
(Aber vermutlich wird es wohl auf das Implicit Naming hinaus laufen.)
Mal einfach ein paar Links, die ich aber alle nicht im Detail geprüft habe:
[URL unfurl="true"]https://www.demo2s.com/java/hibernate-implicitnamingstrategy-tutorial-with-examples.html[/URL]
[URL unfurl="true"]https://www.demo2s.com/java/hibernate-physicalnamingstrategy-tutorial-with-examples.html[/URL]
[URL unfurl="true"]https://vladmihalcea.com/hibernate-physical-naming-strategy/[/URL]
[URL unfurl="true"]https://www.baeldung.com/hibernate-naming-strategy?utm_source=chatgpt.com[/URL]
[URL unfurl="true"]https://www.javacodegeeks.com/2018/03/different-hibernate-naming-strategy.html[/URL]
Also mit Implicit Naming Strategy könnte dieses fk_.... z.B. so in der Art gelöst werden:
[CODE=java]import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.ImplicitForeignKeyNameSource;
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;
public class CustomImplicitNamingStrategy extends ImplicitNamingStrategyJpaCompliantImpl {
@Override
public Identifier determineForeignKeyName(ImplicitForeignKeyNameSource source) {
String tableName = source.getTableName().getText();
String columnName = source.getColumnNames().stream()
.map(Identifier::getText)
.reduce((a, b) -> a + "_" + b)
.orElse("default");
String fkName = "FK_" + tableName + "_" + columnName;
return toIdentifier(fkName, source.getBuildingContext());
}
}
[/CODE]
Und natürlich das Setzen in der xml Config also etwas wie:
[CODE=xml]<property name="hibernate.implicit_naming_strategy" value="com.example.CustomImplicitNamingStrategy"/>
[/CODE]