У меня есть проблема, названная для этого сообщения об ошибке, показанного ниже.
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;
}