我有一个使用JPA的Spring Boot 项目,所以我尝试使用两个表的ID将它们Map到第三个表中:例如,我有一个coupon类,我有一个customer类,我想把customer id和coupon id放到第三个表中。
我有优惠券:
@Entity
@Table(name = "coupons")
public class Coupon {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long coup_id;
private String title;
private String start;
private String end;
private int amount;
private String type;
private String message;
private double price;
private String image;
@ManyToMany(mappedBy = "coupons")
private List<Customer> customers;
我有客户:
@Entity
@Table(name="customers")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int cust_id;
@Size(min=1,message="is required")
private String cust_name;
@Size(min = 1, message = "is required")
private String password;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(
name = "customer_coupon",
joinColumns = { @JoinColumn(name = "cust_id") },
inverseJoinColumns = { @JoinColumn(name = "coup_id") }
)
private List<Coupon> coupons;
我有一个连接表customer_coupon:
这是我在启动项目时遇到的错误:
Caused by: org.hibernate.DuplicateMappingException: Table [coupons] contains physical column name [coup_id] referred to by multiple physical column names: [coupId], [coup_id]
我不知道它是从哪里来的,如果有人能帮助我,我会很高兴的!
6条答案
按热度按时间bqjvbblv1#
要消除歧义,请使用
@Column
注解:这样,您就可以随意命名Java属性,而不必让JPA单独解释它们。
hgc7kmma2#
发现问题......抱歉。
有另一个类
Company
也引用coupId
:这是来自
Company
类。8hhllhi23#
我也有同样问题
@Column(name = "coup_id") private long coupId;
和DB表中称为
coup_id
列。我删除了
@Column
注解,并在工作!仅此而已。Hibernate将xX转换为x_x本身。
2ic8powd4#
我遇到这个问题的另一个情况是由于区分大小写。我在两个类中提到了一个列名ownerid和ownerId。根据错误:表[]包含引用多个物理列名[ownerid]和[owner_id]的逻辑列名[ownerid]。最后我花了很多时间搜索owner_id。
dgjrabp25#
我有一个连接表,它也是一个实体,与两个表有ManyToOne关系,所以它不完全是这个问题,但可以帮助一些人。
将
@MapsId(
属性名称)
添加到@ManyToOne
属性对我很有效。nwlqm0z16#
这可能是因为miss的Mapi是有这个问题的代码
但在这样做之后(添加mappedBy)
它为我解决了