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

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

http://img.mukewang.com/6492b7a50001480e03040271.jpg

我有客户:


@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;

http://img1.mukewang.com/6492b7b200018b9903040251.jpg

我有连接表 customer_coupon:

http://img.mukewang.com/6492b7bc0001e31103720255.jpg

这是我在启动项目时遇到的错误:

Caused by: org.hibernate.DuplicateMappingException: Table [coupons] contains physical column name [coup_id] referred to by multiple physical column names: [coupId], [coup_id]

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


猛跑小猪
浏览 195回答 5
5回答

慕尼黑8549860

要消除歧义,请使用@Column注释:@Column(name&nbsp;=&nbsp;"coup_id") private&nbsp;long&nbsp;coupId;通过这种方式,您可以随意命名 Java 属性,而不用让 JPA 单独解释它们。

慕村9548890

发现问题了...抱歉。还有另一个类Company也指的是coupId:&nbsp; &nbsp; &nbsp;@OneToMany(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cascade = CascadeType.ALL,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; orphanRemoval = true&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp;@JoinColumn(name = "coupId")private List<Coupon> coupons = new ArrayList();这是来自Company班级的。

人到中年有点甜

我有同样的问题。@Column(name = "coup_id") private long coupId;和数据库表中名为 的列coup_id。我删除了@Column注释,然后开始工作!就这样。Hibernate 将 xX 转换为 x_x 本身。

慕斯王

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

温温酱

我有连接表,它也是实体并且与两个表有 ManyToOne 关系,所以这不完全是这个问题,但可以帮助某人。将@MapsId(属性名称添加)到@ManyToOne属性对我有用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java