一个表中的一个列被多个物理列名引用

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)

我不知道它来自哪里,如果有人可以帮助我,我会很高兴!

Vic*_*mas 8

要消除歧义,请使用@Column注释:

@Column(name = "coup_id")
private long coupId;
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以随意命名您的 Java 属性,并且不要让 JPA 单独解释它们。


Rom*_*lin 5

发现问题了...抱歉。

还有另一个类Company也指的是coupId

     @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
        )
 @JoinColumn(name = "coupId")
private List<Coupon> coupons = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

这是来自Company班级的。

  • 为什么这是个问题? (2认同)