Rom*_*lin 4 java mysql hibernate jpa mysql-workbench
我有一个使用 JPA 的 spring boot 项目,所以我试图使用它们的 Id 将两个表映射到第三个表中:例如,我有一个优惠券类,我有一个客户类,我想将客户 ID 和优惠券 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;
Run Code Online (Sandbox Code Playgroud)
我有客户:
@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;
Run Code Online (Sandbox Code Playgroud)
我有连接表 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]
Run Code Online (Sandbox Code Playgroud)
我不知道它来自哪里,如果有人可以帮助我,我会很高兴!
要消除歧义,请使用@Column注释:
@Column(name = "coup_id")
private long coupId;
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以随意命名您的 Java 属性,并且不要让 JPA 单独解释它们。
发现问题了...抱歉。
还有另一个类Company也指的是coupId:
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn(name = "coupId")
private List<Coupon> coupons = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
这是来自Company班级的。
| 归档时间: |
|
| 查看次数: |
18238 次 |
| 最近记录: |