Java 复合外键映射hibernate实体
我在MySQL数据库中有三个表。Java 复合外键映射hibernate实体,java,mysql,spring,hibernate,hibernate-mapping,Java,Mysql,Spring,Hibernate,Hibernate Mapping,我在MySQL数据库中有三个表。 1.具有主键的表用户:用户名。 2.主键为orderid、外键为username的表订单(请参阅表用户的用户名) 3.表ordersdetail,主键为id,复合外键为orderid;用户名(请参阅订单中的订单ID和用户名。) 现在,如何为表ordersDetail设置实体类OrderDetail以使hibernate正常工作 //订单类 @Entity @Table(name="orders") public class Order { @Id privat
1.具有主键的表用户:用户名。
2.主键为orderid、外键为username的表订单(请参阅表用户的用户名)
3.表ordersdetail,主键为id,复合外键为orderid;用户名(请参阅订单中的订单ID和用户名。) 现在,如何为表ordersDetail设置实体类OrderDetail以使hibernate正常工作 //订单类
@Entity
@Table(name="orders")
public class Order {
@Id
private long orderid;
private double price;
private String status;
@ManyToOne
@JoinColumn(name="username")
private User user;
//Constructor take 0 args and 4 args.
public Order() {
this.user = new User();
}
public Order(long orderid, double price, String status, User user) {
this.orderid = orderid;
this.price = price;
this.status = status;
this.user = user;
}
@Embeddable
class CompositeKey implements Serializable {
private static final long serialVersionUID = -8711530222180590954L;
public String username;
public long orderid;
}
//OrderDetail类
@Entity
@Table(name = "ordersdetail")
public class OrderDetail implements Serializable{
private static final long serialVersionUID = -3936223721422733989L;
@Id
@GeneratedValue
private int id;
private int quantity;
private Order order;
@ManyToOne
@JoinColumn(name = "goodsid")
private Goods goods;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "username", referencedColumnName = "username"),
@JoinColumn(name = "orderid", referencedColumnName = "orderid") })
private CompositeKey key;
public CompositeKey getKey() {
return key;
}
public void setKey(CompositeKey key) {
this.key = key;
}
您不应该有复合密钥。Orderdetail应仅具有订单外键(id)。