I use Hibernate 3.3.1 and follow this approximate table structure in the simulation, but I am unable to create a join table with additional attributes.
This is a many-to-many relationship between the Order and Product tables. Connection table - Order Detail table. I followed the approach mentioned here .
Now i have entities
@Entity @Table(name = "Orders") public class Order { @OneToMany(mappedBy="order") private List<OrderDetail> orderItems; }
and
@Entity @Table(name="PRODUCTS") public class Product { @OneToMany(mappedBy="product") private List<OrderDetail> orderItems; }
and
@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; }
and
public class OrderDetailId implements Serializable { private Long orderId; private Long productId; }
I used Apache Derby to run the test, but I was having problems with the created table structure.
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);
It seems like he created all my columns as a primary key. Why is this so?
Mark estrada
source share