[英]Spring Data JPA: Cannot save entity with composite primary key which contains foreign key
[英]Spring data jpa creates wrong fields in empty database for entity with composite primary key that contains foreign key
我有以下数据库结构来简化:
Table Product:
-----
id(pk)
Table Place:
-----
id(pk)
Table WarehouseProduct:
-----
place(pk, fk)
product(pk, fk)
count
我使用此代码在代码中描述数据库:
地方:
@Entity
public class Place {
@Id
String id;
}
产品:
@Entity
public class Product {
@Id
String id;
}
WarehouseProduct 的主键:
@Embeddable
public class WarehouseProductPK implements Serializable {
String place;
String product;
}
仓库产品:
@Entity
public class WarehouseProduct {
@EmbeddedId;
WarehouseProductPK pk;
@OneToOne(targetEntity = Product.class)
Product product;
@OneToOne(targetEntity = Place.class)
Place place;
@Column(nullable = false)
int count;
}
我在空的 h2 数据库上对此进行了测试。 结果是为 WarehouseProduct 创建了下表:
Table WarehouseProduct:
-----
place(pk)
product(pk)
count
placeId(fk)
productId(fk)
如何在空数据库中使用数据 jpa 创建所需的数据库结构?
使用以下代码为 WarehouseProduct 实体数据 jpa 创建所需的数据库结构:
WarehouseProduct 的主键:
@Embeddable
public class WarehouseProductPK implements Serializable {
@OneToOne(targetEntity = Place.class)
Place place;
@OneToOne(targetEntity = Product.class)
Product product;
}
仓库产品:
@Entity
public class WarehouseProduct {
@EmbeddedId;
WarehouseProductPK pk;
@Column(nullable = false)
int count;
}
结果我在空的 h2 db 中得到了这样的 WarehouseProduct 表:
Table WarehouseProduct:
-----
placeId(pk, fk)
productId(pk, fk)
count
@Embeddable
public class WarehouseProductPK implements Serializable {
@Column(name="place")
String placeId;
@Column(name="product")
String productId;
}
@Entity
public class WarehouseProduct {
@EmbeddedId;
WarehouseProductPK pk;
@OneToOne
@MapsId("placeId")
@JoinColumn(name="place")
Place place;
@OneToOne
@MapsId("productId")
@JoinColumn(name="product")
Product product;
@Column(nullable = false)
int count;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.