Превратите составной идентификатор в простой идентификатор Entity Hibernate - PullRequest
0 голосов
/ 15 мая 2019

Я работаю с 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.

Как я могу исправить проблему, используя исходную таблицу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...