Я пытаюсь заставить JPA/Hibernate генерировать и использовать только строчные табличные имена. Я реализовал NamingStrategy так:Что означает ошибка «org.hibernate.DuplicateMappingException»?
public class MyNamingStrategy extends DefaultNamingStrategy {
@Override
public String classToTableName(String className) {
return super.classToTableName(className).toLowerCase();
}
}
я применил его, установив это свойство в persistence.xml:
<property name="hibernate.ejb.naming_strategy" value="entities.strategy.MyNamingStrategy"/>
Когда я делаю это я получаю эту 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)
Что такое
Same phy sical table name [планирование] ссылается на несколько имен логических таблиц: [Планирование], [ЗаказProductMan_Planning]
0?
Сущности от ошибки, упрощенной, насколько я мог. Дайте мне знать, если вам нужно все остальное.
@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;
// ...
}
Не могли бы вы предоставить немного больше информации - как отображения ваших объектов. – Bozho
Я обновил свой вопрос. Дайте мне знать, если вам нужно больше. Благодаря! – Bogdan
Вы уверены, что не пытаетесь создать таблицы, которые уже существуют? Сообщение: «То же имя физической таблицы [планирование] ссылается на несколько имен логических таблиц: [Планирование]» заставляет меня думать, что версия верхнего регистра может быть уже там, и ваша нижняя версия с обложкой не может быть создана. Имейте в виду, что большинство БД-систем не чувствительны к регистру. –