【发布时间】:2022-01-17 14:51:13
【问题描述】:
初始情况: 我有这两个实体,GroceriesList 和 Product。
杂货清单: 一个 GroceriesList 可以有多个产品。
@Entity
@Table(name = "lists")
public class GroceriesList {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "list_id")
private Long listId;
@Column(name = "list_name")
private String listName;
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "lists_products",
joinColumns = @JoinColumn(name = "product_id", referencedColumnName = "list_id"),
inverseJoinColumns = @JoinColumn(name = "list_id", referencedColumnName = "product_id")
)
private Set<Product> products;
}
产品: 一个产品可以分配到多个 GroceriesLists
@Entity
@Table(name = "products")
public class Product {
public enum Category {
Dairy,
Fruit,
Vegetable,
Meat,
Grains
}
// Product ID Column, GenerationType.Identity refers to auto incr in Postgres
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private Long productId;
@Column(name = "product_name")
private String productName;
@Column(name = "product_vendor")
private String productVendor;
@Enumerated(EnumType.STRING)
@Column(name = "product_category")
private Category productCategory;
@Column(name = "product_storedquantity")
private Integer productStoredQuantity;
@JsonIgnore
@ManyToMany(mappedBy = "products")
private List<GroceriesList> groceriesLists;
}
实体和关系存储在 Postgres 的三个不同表中(一个用于列表,一个用于产品,一个用于关系映射表)。
映射表: Mapping Table "lists_products"
产品示例: Sample Product with Id=4
问题:我正在尝试创建新列表,并且可以。但是,您可以从映射表图像中发现,Hibernate 将 ID 插入到错误的列中。映射表中的list_id当前正在获取product_id,映射表中的product_id正在获取list_id。 我试图更改 GroceriesList 实体中 @JoinTable 注释中列名和引用的顺序。但是,这会引发映射错误。我认为我的错误在于该注释中的某个地方。有趣的是,Hibernate 使用了正确的SQL-Query。我在这里错过了什么?
【问题讨论】:
标签: java postgresql spring-boot hibernate spring-data-jpa