Я использую Hibernate 3.3.1 и продолжаю моделировать этот пример структуры таблицы , но у меня возникают проблемы при создании таблицы соединения с дополнительными атрибутами.
Это соотношение «многие ко многим» между таблицами Order
и Product
.Таблица соединения - это таблица Order Detail
.Я следовал подходу, упомянутому здесь .
Теперь у меня есть сущности
@Entity
@Table(name = "Orders")
public class Order {
@OneToMany(mappedBy="order")
private List<OrderDetail> orderItems;
}
и
@Entity
@Table(name="PRODUCTS")
public class Product {
@OneToMany(mappedBy="product")
private List<OrderDetail> orderItems;
}
и
@Entity
@IdClass(OrderDetail.class)
@Table(name = "ORDER_DETAIL")
public class OrderDetail implements Serializable {
@Id
@Column(name="ORDER_ID")
private Long orderId;
@Id
@Column(name="PRODUCT_ID")
private Long productId;
@Column(name = "PRICE")
private double price;
@Column(name = "LAST_UPDATED_TIME")
private Date lastUpdatedTime;
@ManyToOne
@JoinColumn(name = "ORDER_ID")
private Order order;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
}
и
public class OrderDetailId implements Serializable {
private Long orderId;
private Long productId;
}
Я использовал Apache Derby для выполнения теста, но у меня возникли проблемы со сгенерированной структурой таблицы.
CREATE TABLE ORDER_DETAIL (
PRODUCT_ID BIGINT NOT NULL,
ORDER_ID BIGINT NOT NULL,
LAST_UPDATED_TIME TIMESTAMP NOT NULL,
PRICE DOUBLE NOT NULL
);
CREATE INDEX SQL120323142938020 ON ORDER_DETAIL (PRODUCT_ID ASC);
CREATE UNIQUE INDEX SQL120323142937810 ON ORDER_DETAIL (PRODUCT_ID ASC, ORDER_ID ASC, LAST_UPDATED_TIME ASC, PRICE ASC);
ALTER TABLE ORDER_DETAIL ADD CONSTRAINT SQL120323142937810 PRIMARY KEY (PRODUCT_ID, ORDER_ID, LAST_UPDATED_TIME, PRICE);
ALTER TABLE ORDER_DETAIL ADD CONSTRAINT FK4A94AA82CC6D989A FOREIGN KEY (PRODUCT_ID)
REFERENCES PRODUCTS (PROD_ID);
Кажется, он создал всеиз моих столбцов в качестве первичного ключа.Почему это так?