Я получаю это исключение при попытке сохранить объект entity в базе данных Oracle, и я начал получать эту ошибку только после переключения моего проекта JPA на EclipseLink 2.0 с Hibernate , и я использую «сущность наследование », если это может иметь какое-либо отношение к этому (что я очень подозреваю).
*
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-00957: duplicate column name
Error Code: 957
Call: INSERT INTO SUREC (ID, PERSON_ID, SURECID, VERSIYONNO, FAZ, FORM_TARIH, DURUMKODU_ID, surecId) VALUES (...
*
Сообщение об исключении предполагает, что SURECID генерируется дважды в SQL, что, по-видимому, вызывает ошибку duplicate column , однако surecId определяется один раз как свойство и аннотируетсяв качестве столбца дискриминатора в классе сущности: (см. ниже)
Базовый класс сущности имеет вид:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name = "surecId")
public class Surec implements java.io.Serializable {
private static final long serialVersionUID = -6008473677883005878L;
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@Column(name = "FAZ")
private int faz;
@Basic(optional = false)
@Column(name = "FORM_TARIH")
@Temporal(TemporalType.DATE)
private Date formTarih;
@Column(name = "PERSON_ID")
private Integer personId;
// @Column(name = "SURECID", updatable = false, length=17)
@Column(updatable = false, length=17)
private String surecId;
@Column(name = "VERSIYONNO")
private Long versiyonno;
@JoinColumn(name = "DURUMKODU_ID", referencedColumnName = "ID")
@ManyToOne
private DurumKod durumKodu;
public Surec() {
}
public Surec(String surecId) {
this.surecId = surecId;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
.
.
.
public String getSurecId() {
return surecId;
}
public void setSurecId(String surecId) {
this.surecId = surecId;
}
.
.
.
Я прокомментировал аннотацию "@Column (name = ..." jus toпосмотрите, не может ли это быть причиной ошибки дублирующегося столбца, но это не сработало.
А ниже - полиморфная сущность, расширяющаяся на Surec.java и выше:
@Entity
@DiscriminatorValue("atf")
public class MailOrder extends Surec {
private static final long serialVersionUID = 8333637555543614502L;
@Column(name = "AMOUNT")
private Double amount;
@Basic(optional = false)
@Column(name = "CURRENCY", length = 17)
private String currency;
@Column(name = "BANK")
private String Bank;
@Column(name = "ACCOUNT_ID", length = 31)
private String accountId;
@Column(name = "INVOICE_ID")
private Integer invoiceId;
public MailOrder() {
}
public MailOrder(String surecId) {
super(surecId);
}
public String getCurrency() {
return currency;
}
.
.
.
Ошибка возникает при попытке сохраненияэта самая суб-сущность.Он не переопределяет никакие свойства своего суперкласса, хотя я не уверен, что это конструктор ...
Любые советы по решению проблемы (и подтверждение любого возможного EclipseLink или Oracle (или моего!)ошибка будет оценена.