簡體   English   中英

Java EE - 一對多雙向

[英]Java EE - One to many bidirectional

據我所知,單向一對多關系有一個連接表,雙向一對多關系沒有。

當我實現單向關系時,我的應用程序工作,但我似乎無法讓它適用於雙向關系。

這些是我正在創建的表

CREATE TABLE CUSTOMER (customerNo INTEGER PRIMARY KEY, joinDate DATE, customerName VARCHAR2(20));

CREATE TABLE BOOKING (bookingNo INTEGER PRIMARY KEY, bookedDate DATE, custNo INTEGER, itemNo NUMBER(10), itemName VARCHAR2(20), quantity NUMBER(5), bookingDate DATE, bookingValue NUMBER(8, 2), constraint booking_fk foreign key (custNo) references customer(customerNo));

我的第一堂課

  public class Booking implementes Serializable{
  private Timestamp bookeddate;
      private Timestamp bookingdate;

  @Id()
   @GeneratedValue(generator"MY_SEQ_GEN")
   @SequenceGenerator(name="MY_SEQ_GEN", sequenceName="MY_SEQUENCE", allocationSize=1)
   @Column(name="bookingNo", nullable=false)
  private Long bookingno;
  private Double bookingvalue;

  @Column(length = 20)
  private String itemname;
  private Long itemno;
  private Long quantity;

  private Customer customer;

  @ManyToOne
  public Customer getCustomer() {
    return customer;
  }

  ...

我的另一課

  public class Customer implements Serializable {
  @Column(length = 20)
  private String customername;
  @Id()
     @GeneratedValue(generator="THE_SEQ_GEN")
     @SequenceGenerator(name="THE_SEQ_GEN", sequenceName="THE_SEQUENCE", allocationSize=1)
     @Column(name="customerNo", nullable=false)
  private Long customerno;
  private Timestamp joindate;

  @OneToMany(cascade=(CascadeType.ALL), fetch=FetchType.EAGER, mappedBy = "customer")
  private List<Booking> bookings = new ArrayList<Booking>();

  public List<Booking> getBookings() {
      return bookings;
    }

運行此方法后,我的bean掉了下來

public void addBooking(Long custno, Long tickno, Long quantity) { 
    Customer cust = (Customer) em.createNamedQuery("findCustomerByPrimaryKey").setParameter("eid", custno).getSingleResult();
    Booking b = new Booking();

        b.setBookeddate(new Timestamp(System.currentTimeMillis()));

        b.setCustomer(cust);

        b.setTicket((Ticket) em.createNamedQuery("findTicketByPrimaryKey").setParameter("eid", tickno).getSingleResult(), quantity);

        cust.addBooking(b);

        //persistBooking(b);
  }

這是我的錯誤信息。

javax.ejb.EJBException: BEA1-001D72BA69DC9E472B1E: Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00904: "CUSTOMER_CUSTOMERNO": invalid identifier

Error Code: 904
Call: INSERT INTO BOOKING (bookingNo, ITEMNAME, BOOKINGDATE, BOOKINGVALUE, ITEMNO, QUANTITY, BOOKEDDATE, CUSTOMER_customerNo) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    bind => [71, Metallica, 2011-01-05 22:07:17.788, 200.0, 420, 2, 2011-01-05 22:07:17.788, 1526]
Query: InsertObjectQuery(courseworkone.Booking@201a41)
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:801)

您的客戶映射使用默認列名稱“CUSTOMER_CUSTOMERNO”,但您使用“custNo”創建了表。 您需要使用正確的列名稱。

@ManyToOne
@JoinColumn(name="custNo")
public Customer getCustomer() {
    return customer;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM