Estoy intentando obligar a JPA/Hibernate a generar y usar solo nombres de tablas en minúsculas. He implementado un NamingStrategy así:¿Qué significa el error "org.hibernate.DuplicateMappingException"?
public class MyNamingStrategy extends DefaultNamingStrategy {
@Override
public String classToTableName(String className) {
return super.classToTableName(className).toLowerCase();
}
}
he aplicado mediante el establecimiento de esta propiedad en persistence.xml:
<property name="hibernate.ejb.naming_strategy" value="entities.strategy.MyNamingStrategy"/>
Cuando hago esto consigo este 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)
¿Qué significa la
Same phy El nombre de tabla sical [planificación] hace referencia a varios nombres de tabla lógica: [Planificación], [OrderProductMan_Planning]
mean?
Entidades del error, simplificadas tanto como pude. Avísame si necesitas el resto.
@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;
// ...
}
Podría proporcionarnos un poco más de información, como las asignaciones de sus entidades. – Bozho
He actualizado mi pregunta. Avíseme si necesita más. ¡Gracias! – Bogdan
¿Estás seguro de que no estás intentando crear tablas que ya existen? El mensaje: 'Mismo nombre de tabla física [planificación] hace referencia a varios nombres de tablas lógicas: [Planificación]' me hace pensar que la versión en mayúsculas podría estar allí y no se puede crear la versión de la carcasa inferior. Tenga en cuenta que la mayoría de los motores de DB no distinguen entre mayúsculas y minúsculas. –