【问题标题】:org.hibernate.DuplicateMappingException: Table contains physical column name [coverage_name] referred to by multiple physical column names:org.hibernate.DuplicateMappingException:表包含多个物理列名引用的物理列名[coverage_name]:
【发布时间】:2019-01-26 13:14:59
【问题描述】:

我正在使用下面的类,但给出了类似 Caused by: org.hibernate.DuplicateMappingException: Table [] contains physical column name [scheme_name] 由多个物理列名引用的异常:[SCHEME],[schemeName] 帮助我解决这个问题。

@Embeddable
public class DRollSchemesId implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ROLL_NO", length = 20)
    private String rollNo;

    @Id
    @Column(name = "SCHEME", length = 100, updatable = false, insertable = false )
    private String schemeName;

   public DRollSchemesId() {
   }

   public DRollSchemesId(String rollNo, String schemeName) {
      this.rollNo = rollNo;
      this.schemeName = schemeName;
   }

   public String getrollNo() {
       return this.rollNo;
   }

   public void setrollNo(String rollNo) {
       this.rollNo = rollNo;
   }
   public String getschemeName() {
       return this.schemeName;
   }

   public void setschemeName(String schemeName) {
       this.schemeName = schemeName;
   }

这是这里的实体,我正在尝试通过使用该 Embeddable 类来使用复合键。

@Entity
@Table(name = "D_ROLL_SCHEMES")
  @IdClass(DRollSchemesId.class)
public class DRenewalAddonCoverages  implements java.io.Serializable{

  private static final long serialVersionUID = 1L;

  private DRollSchemesId id;
  @Id
  @Column(name = "ROLL_NO", length = 20)
    private String rollNo;

  @Id
  @Column(name = "SCHEME", length = 100, updatable = true, insertable 
= true )
    private String schemeName;



    public DRenewalAddonCoverages(){
    }


  @Id
  @AttributeOverrides(
      {
        @AttributeOverride(column = @Column(name = "ROLL_NO",  
updatable = true, insertable = true), name = "rollNo"),
        @AttributeOverride(column = @Column(name = "SCHEME", updatable 
= true, insertable = true), name = "schemeName")

      })

  @EmbeddedId
  public DRollSchemesId getId() {
        return this.id;
    }


    public String getrollNo() {
    return rollNo;
  }


  public void setrollNo(String rollNo) {
    this.rollNo = rollNo;
  }


  public String getschemeName() {
    return schemeName;
  }

  public void setschemeName(String schemeName) {
    this.schemeName = schemeName;
  }


  public void setId(DRollSchemesId id) {
        this.id = id;
    }

}

【问题讨论】:

  • 为什么要在id类和实体类中定义schemeName
  • 我必须将该类对象也插入到其他列中。
  • 只需删除@Column 注释之一
  • 检查表中的列名

标签: java spring-boot jpa hibernate-mapping


【解决方案1】:

尝试如下:

class DRollSchemesId implements Serializable {
    private String rollNo;
    private String schemeName;
}

@Entity
@Table(name = "D_ROLL_SCHEMES")
@IdClass(DRollSchemesId.class)
public class DRenewalAddonCoverages implements java.io.Serializable {

    @Id
    @Column(name = "ROLL_NO", length = 20)
    private String rollNo;

    @Id
    @Column(name = "SCHEME", length = 100, updatable = true, insertable = true)
    private String schemeName;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多