Ich versuche, JPA/Hibernate dazu zu zwingen, nur Tabellennamen in Kleinbuchstaben zu generieren und zu verwenden. Ich habe eine NamingStrategy wie folgt implementiert:
public class MyNamingStrategy extends DefaultNamingStrategy {
@Override
public String classToTableName(String className) {
return super.classToTableName(className).toLowerCase();
}
}
Ich habe es angewendet, indem ich diese Eigenschaft in der persistence.xml gesetzt habe:
Wenn ich das mache, erhalte ich diesen Stacktrace:
SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
org.hibernate.DuplicateMappingException: Same physical table name [planning] references several logical table names: [Planning], [OrderProductMan_Planning]
at org.hibernate.cfg.Configuration$MappingsImpl.addTableBinding(Configuration.java:2629)
at org.hibernate.cfg.annotations.TableBinder.buildAndFillTable(TableBinder.java:254)
at org.hibernate.cfg.annotations.TableBinder.bind(TableBinder.java:177)
Was bedeutet das
Same physical table name [planning] references several logical table names: [Planning], [OrderProductMan_Planning]
?
Entitäten aus dem Fehler, so einfach wie möglich dargestellt. Lassen Sie mich wissen, wenn Sie den Rest benötigen.
@Entity
public class Planning implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private Integer qty;
@ManyToOne
private OrderProductMan orderProduct;
....
}
@Entity
@Table
public class OrderProductMan implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
private Integer opId;
@Basic(optional = false)
private int qty;
@ManyToOne(optional = false)
private ProductMan produse;
@ManyToOne(optional = false)
private OrderMan orders;
@Transient
private int totalScheduled;
@Transient
private int totalProduced;
// ...
}
0 Stimmen
Könnten Sie etwas mehr Informationen bereitstellen - wie zum Beispiel die Zuordnungen Ihrer Entitäten.
0 Stimmen
Ich habe meine Frage aktualisiert. Lass mich wissen, wenn du mehr brauchst. Danke!
0 Stimmen
Sind Sie sicher, dass Sie versuchen, Tabellen zu erstellen, die bereits vorhanden sind? Die Meldung:
Gleicher physischer Tabellenname [planning] verweist auf mehrere logische Tabellennamen: [Planung]
lässt mich vermuten, dass die Großbuchstaben-Version bereits vorhanden sein könnte und Ihre Kleinbuchstaben-Version nicht erstellt werden kann. Beachten Sie, dass die meisten DB-Engines nicht auf Groß- und Kleinschreibung achten.