ORA-00904: проблема с отображением вызывает неверный идентификатор - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть проблема, названная для этого сообщения об ошибке, показанного ниже.

java.sql.SQLSyntaxErrorException: ORA-00904: "DETAILORDE1_"."BOOK": invalid identifier

Что означает не сопоставление с Book и DetailOrder class.

Я искал много ресурсов, чтобы решить это.Я попробовал много вариантов из них, но ничего не изменилось. pk.book значение не может быть воспринято из класса Book.

Как это исправить?

Вот коды, показанные ниже.

Book

@Entity
@Table(name="BOOK",catalog = "JSPPROJECTDATABASE")
public class Book implements Serializable{
...
@OneToMany(mappedBy = "pk.book", cascade=CascadeType.ALL)
private Set<DetailOrder> detailOrders = new HashSet<DetailOrder>();

DetailOrder

@Entity
@Table(name = "DETAIL_ORDER", catalog = "JSPPROJECTDATABASE")
@AssociationOverrides({
        @AssociationOverride(name = "pk.orders", 
            joinColumns = @JoinColumn(name = "ORDER_ID")),
        @AssociationOverride(name = "pk.book", 
            joinColumns = @JoinColumn(name = "BOOK_ID")) })
public class DetailOrder implements Serializable{
...
@EmbeddedId
    public DetailOrderId getPk() {
        return pk;
    }

    public void setPk(DetailOrderId pk) {
        this.pk = pk;
    }

    @Transient
    public Book getBook() {
        return getPk().getBook();
    }

    public void setBook(Book book) {
        getPk().setBook(book);
    }

    @Transient
    public Orders getOrders() {
        return getPk().getOrders();
    }

    public void setOrders(Orders orders) {
        getPk().setOrders(orders);
    }

DetailOrderId

@Embeddable
public class DetailOrderId implements Serializable{

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "BOOK_ID")
    private Book book;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "ORDER_ID")
    private Orders orders;

    public Book getBook() {
        return book;
    }
    public void setBook(Book book) {
        this.book = book;
    }
    public Orders getOrders() {
        return orders;
    }
    public void setOrders(Orders orders) {
        this.orders = orders;
    }

1 Ответ

0 голосов
/ 08 апреля 2019

Я решил проблему без использования составного идентификатора.

...