Я пытаюсь реализовать связь «один ко многим» между заказом и продуктом заказа, и я всегда сталкиваюсь с этим исключением:
Foreign key (FKmn6eaqdlnl33lnryjkwu09r0m:order_product_entity [order_id,product_id])) must have same number of columns as the referenced primary key (orders [id])
Я знаю, что это значит, но я не уверен, как мне следует изменитьмоя схема, чтобы решить это.Мой дизайн основан на этом уроке: Spring Java ECommerce Tutorial
Я не могу сказать разницу, за исключением того, что мой код написан на Kotlin.
Я использую Spring Bootс данными Spring JPA и Kotlin.
Мой товар:
@Entity
@Table(name = "product")
data class ProductEntity(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long,
@NotNull(message = "Product name is required")
var name: String,
var price: Double,
var description: String
)
Мой заказ:
@Entity
@Table(name = "orders")
data class OrderEntity(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id:Long,
var dateCreated:Date,
var status:String,
@JsonManagedReference
@OneToMany(cascade = arrayOf(CascadeType.ALL), mappedBy = "orderProductEntityId")
@Valid
val orderProducts: List<OrderProductEntity>
)
OrderProductEntity:
@Entity
data class OrderProductEntity(
@EmbeddedId
@JsonIgnore
var orderProductEntityId: OrderProductEntityId,
@JsonBackReference
@ManyToOne(optional = false, fetch = FetchType.LAZY)
var order: OrderEntity,
@ManyToOne(optional = false, fetch = FetchType.LAZY)
var product: ProductEntity,
@Column(nullable = false)
var quantity: Int = 0
)
Мой составной первичный ключ:
@Embeddable
data class OrderProductEntityId(
@Column(name = "order_id")
var orderId: Long = 0,
@Column(name = "product_id")
var productId: Long = 0
) : Serializable
Есть предложения?