Que signifie "org.hibernate.DuplicateMappingException"?
Je suis en train d'essayer de forcer JPA/Hibernate pour générer et utiliser uniquement les minuscules tablenames. J'ai mis en place un NamingStrategy comme ceci:
public class MyNamingStrategy extends DefaultNamingStrategy {
@Override
public String classToTableName(String className) {
return super.classToTableName(className).toLowerCase();
}
}
J'ai appliqué par la définition de cette propriété dans persistence.xml:
<property name="hibernate.ejb.naming_strategy" value="entities.strategy.MyNamingStrategy"/>
Quand je fais ce que je reçois cette 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)
Ce qui ne l'
Même nom de la table physique [planification] fait référence à plusieurs logiques noms de table: [Planning], [OrderProductMan_Planning]
veux dire?
Entités de l'erreur, simplifié autant que je le pouvais. Laissez-moi savoir si vous avez besoin du reste.
@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;
//...
}
source d'informationauteur Bogdan | 2011-01-31
Vous devez vous connecter pour publier un commentaire.
Bogdan, merci pour ce détachement. J'ai eu un problème similaire avec la casse des noms de table pour Unix/Windows portabilité de l'utilisation d'Hibernate/JPA/MySQL sur Linux.
Comme vous, j'ai décidé de lier mes noms de table comme tous les bas-de-casse par la configuration personnalisée NamingStrategy dans mon META-INF/persistence.xml fichier:
J'ai eu la même exception: org.mise en veille prolongée.DuplicateMappingException: Même nom de la table physique... Par le biais de l'utilisation du débogueur, j'ai eu une révélation que peut-être je n'étais pas à l'aide de DefaultNamingStrategy pour commencer! J'ai donc changé ma classe de base pour org.mise en veille prolongée.cfg.EJB3NamingStrategy. Ce qui est plus approprié lors de l'utilisation des Annotations JPA, je crois! Ici était ma dernière NamingStrategy:
PS la solution précédente par dursun ne fonctionne pas pour moi.