Я работаю с Java 1.7, JBOSS EAP 6.4, hibernate jpa 2.0 и Oracle Oracle.
Я пытаюсь изменить составной идентификатор объекта в простой идентификатор.
Оригинальные классы
@Entity
@Table(name = "FOO_BAR")
@IdClass(FooBarId.class)
public class FooBar{
@ManyToOne
@JoinColumn(
name = "COD_FOO",
updatable = false,
insertable = false)
@JsonIgnore
private Foo foo;
@ManyToOne
@JoinColumn(
name = "COD_BAR",
updatable = false,
insertable = false)
@JsonIgnore
private Bar bar;
@Id
@Column(name = "COD_FOO")
private String codFoo;
@Id
@Column(name = "COD_BAR")
private String codBar;
//getter and setter
}
public class FooBarId implements Serializable {
private String codFoo;
private String codBar;
public String getCodFoo() {
return codFoo;
}
public void setCodFoo(String codFoo) {
this.codFoo = codFoo;
}
public String getCodBar() {
return codBar;
}
public void setCodBar(String codBar) {
this.codBar = codBar;
}
}
Новые классы
@Entity
@Table(name = "FOO_BAR")
public class FooBar{
@Id
private Long Id;
@ManyToOne
@JoinColumn(
name = "COD_FOO",
updatable = false,
insertable = false)
@JsonIgnore
private Foo foo;
@ManyToOne
@JoinColumn(
name = "COD_BAR",
updatable = false,
insertable = false)
@JsonIgnore
private Bar bar;
@Column(name = "COD_FOO")
private String codFoo;
@Column(name = "COD_BAR")
private String codBar;
//getter and setter
}
@Entity
@Table(name = "FOO_BAR_OTHER")
public class FooBarOther{
@Id
@Column(name = "ID")
private Long id;
@Column(name = "DATA")
private String data;
@ManyToOne
@JoinColumn(
name = "ID_FOO_BAR",
referencedColumnName = "ID",
insertable = false,
updatable = false)
private FooBar fooBar;
}
Нет проблем на этапе сборки.На этапе развертывания у меня появляется следующая ошибка:
[PersistenceUnit: PersistenceUnit] Unable to build EntityManagerFactory
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: PersistenceUnit] Unable to build EntityManagerFactory
Caused by: org.hibernate.MappingException: Foreign key (FK_ljn0q2iefn1qh0dutifext8fj:FOO_BAR_OTHER [ID_FOO_BAR])) must have same number of columns as the referenced primary key (FOO_BAR [COD_FOO,COD_BAR])"}}
что-то сохранило составной ключ, и я не могу его удалить.
Я попытался создать новый класс FooBar2 с той же таблицей FOO_BAR, та же ошибка.
Я пытался создать класс FooBar2 только с идентификатором и той же таблицей, та же ошибка.
Я пытался удалить все ограничения базы данных, та же ошибка.
Единственное, что сработало, - это создание новой таблицы копий исходного FOO_BAR2.
Как я могу исправить проблему, используя исходную таблицу?