初始情况:我有这两个实体,杂货清单和产品。
杂货清单:一个杂货清单可以有几种产品。
@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;
}
产品:一个产品可以分配给多个杂货店
@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中的三个不同表中(一个用于列表,一个用于产品,一个用于关系映射表)。
映射表:映射表"lists_products"
示例产品:Id=4的示例产品
问题是:我正在尝试创建新的列表,这很有效。但是,正如您可以从映射表图像中看到的那样,Hibernate将ID插入到错误的列中。映射表中的list\u id当前正在获取product\u id,映射表中的product\u id正在获取list\u id。我已尝试更改列名的顺序
在咨询了弗拉迪米尔的解决方案后,它给了我一个想法,我解决了我的问题。问题出在@JoinColumn注释中,我认为“name=…”属性引用数据库中的列名。
@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;
但是,该属性引用了Spring Boot中实体内部声明的变量,即listId
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "list_id")
private Long listId;
因此,@JoinTable注释的工作实现应该如下所示,其中“name=…”使用该变量名称:
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "lists_products",
joinColumns = @JoinColumn(name = "listId", referencedColumnName = "list_id"),
inverseJoinColumns = @JoinColumn(name = "productId", referencedColumnName = "product_id")
)
private Set<Product> products;
请在Access数据库中插入数据时遇到错误代码。它一直说我的INSERT INTO语句中存在sytanx错误。有人能帮我解决这个问题吗?这是代码
我有一个postgres数据库,包含一个名为“users”的表。该表有四个字段: id BIGSERIAL主键 显示名称文本不为空, 电子邮件文本不为空 电话号码文本 我想从dart代码中添加数据。我的尝试是这样的: 问题是我遇到了一个例外 (PostgreSQLSeverity.error 42601:在“display_name”处或附近出现语法错误)
问题内容: 我有Cassandra数据库,可以通过Apache Spark使用SparkSQL从该数据库分析数据。现在我想将那些分析过的数据插入PostgreSQL中。除了使用PostgreSQL驱动程序之外,是否有其他方法可以直接实现此目的(我想通过postREST和Driver实现它,我想知道是否有类似的方法)? 问题答案: 目前,尚无将RDD写入任何DBMS的本地实现。这里是Spark用户列
错误 用消息'SQLSTATE[HY000]照亮/数据库/查询异常:一般错误:1表配置文件没有名为标题的列(SQL:插入到配置文件(标题,描述,user_id,updated_at,created_at)值(asd,123123, 2, 2020-07-31 10:19:03, 2020-07-31 10:19:03))' 这是我在“$profile”时遇到的错误- 这是2020年07月31日07
我在尝试将记录插入数据库时遇到错误。 错误如下: 守则: 数据库: