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

z9zf31ra  于 2022-12-04  发布在  其他
关注(0)|答案(6)|浏览(202)

我有一个使用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]

我不知道它是从哪里来的,如果有人能帮助我,我会很高兴的!

bqjvbblv

bqjvbblv1#

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

@Column(name = "coup_id")
private long coupId;

这样,您就可以随意命名Java属性,而不必让JPA单独解释它们。

hgc7kmma

hgc7kmma2#

发现问题......抱歉。
有另一个类Company也引用coupId

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

这是来自Company类。

8hhllhi2

8hhllhi23#

我也有同样问题
@Column(name = "coup_id") private long coupId;
和DB表中称为coup_id列。
我删除了@Column注解,并在工作!仅此而已。
Hibernate将xX转换为x_x本身。

2ic8powd

2ic8powd4#

我遇到这个问题的另一个情况是由于区分大小写。我在两个类中提到了一个列名ownerid和ownerId。根据错误:表[]包含引用多个物理列名[ownerid]和[owner_id]的逻辑列名[ownerid]。最后我花了很多时间搜索owner_id。

dgjrabp2

dgjrabp25#

我有一个连接表,它也是一个实体,与两个表有ManyToOne关系,所以它不完全是这个问题,但可以帮助一些人。
@MapsId(属性名称)添加到@ManyToOne属性对我很有效。

nwlqm0z1

nwlqm0z16#

这可能是因为miss的Mapi是有这个问题的代码

@OneToMany
@JsonManagedReference
private List<TweetsEntity> userTweets;

但在这样做之后(添加mappedBy)

@OneToMany(mappedBy = "user")
@JsonManagedReference
private List<TweetsEntity> userTweets;

它为我解决了

相关问题