为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2023-06-21 16:40:47
我有一个使用 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;我有客户:@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]我不知道它来自哪里,如果有人能帮助我,我会很高兴!
查看完整描述

5 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

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

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

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


查看完整回答
反对 回复 2023-06-21
?
慕村9548890

TA贡献1884条经验 获得超4个赞

发现问题了...抱歉。


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


     @OneToMany(

            cascade = CascadeType.ALL,

            orphanRemoval = true

        )

 @JoinColumn(name = "coupId")

private List<Coupon> coupons = new ArrayList();

这是来自Company班级的。


查看完整回答
反对 回复 2023-06-21
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我有同样的问题。

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

和数据库表中名为 的列coup_id

我删除了@Column注释,然后开始工作!就这样。

Hibernate 将 xX 转换为 x_x 本身。


查看完整回答
反对 回复 2023-06-21
?
慕斯王

TA贡献1864条经验 获得超2个赞

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



查看完整回答
反对 回复 2023-06-21
?
温温酱

TA贡献1752条经验 获得超4个赞

我有连接表,它也是实体并且与两个表有 ManyToOne 关系,所以这不完全是这个问题,但可以帮助某人。

@MapsId(属性名称添加)@ManyToOne属性对我有用。


查看完整回答
反对 回复 2023-06-21
  • 5 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信