Java 有人能解释一下吗;实体“的映射中的重复列”;?

Java 有人能解释一下吗;实体“的映射中的重复列”;?,java,hibernate,Java,Hibernate,我不断地犯错误: org.hibernate.MappingException:实体映射中的重复列: net.teknow.moneymachine.model.Quote列:日期(应映射 使用insert=“false”update=“false”)“ 不管我怎么努力 这是我的报价课: public class Quote { @EmbeddedId private QuoteId quoteId; //composite id needed by hibernate

我不断地犯错误:

org.hibernate.MappingException:实体映射中的重复列: net.teknow.moneymachine.model.Quote列:日期(应映射 使用insert=“false”update=“false”)“

不管我怎么努力

这是我的报价课:

public class Quote {
    @EmbeddedId
    private QuoteId quoteId;    //composite id needed by hibernate
    
    private String symbol;
    private Date date;
    private float close;
 
    public Quote() {}
    public Quote(String symbol, Date date, float close) {
        this.symbol = symbol;
        this.date = date;
        this.close = close;
    }
    public QuoteId getId() {
        return quoteId;
    }
    public void setId(QuoteId id) {
        this.quoteId = id;
    }

    @Column(name = "symbol", insertable = false, updatable = false, nullable = false)
    public String getSymbol() {
        return symbol;
    }
    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    @Column(name = "date", insertable = false, updatable = false, nullable = false)
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
... //other getters and setters
下面是QuoteId类,Hibernate应该需要它来将两个列作为每个列的复合键连接起来


希望各位专家能告诉我我做错了什么。

您的
QuoteId
类被标记为
@embeddeble
,这意味着
Quote
的数据库表除了自己的列之外,还从
QuoteId
中提取所有列

由于在两个表中都有一个名为
date
(顺便说一句,
symbol
)的列,因此最终会得到一个表定义,其中有两个名称相同的列,这是不允许的


如果您试图为
Quote
使用复合键,则需要从
Quote
中删除
date
symbol
。请注意,这不是将两个表连接起来,因为将不会有
QuoteId
作为单独的表。

QuoteId
类标记为
@embedded
>这意味着
Quote
的数据库表除了自己的列之外,还从
QuoteId
中提取所有列

由于在两个表中都有一个名为
date
(顺便说一句,
symbol
)的列,因此最终会得到一个表定义,其中有两个名称相同的列,这是不允许的


如果您试图为
Quote
使用复合键,则需要从
Quote
中删除
date
symbol
。请注意,这不是将两个表连接起来,因为将不会有
QuoteId
作为单独的表。

这完全有意义。非常感谢您帮助我理解!这完全有道理。非常感谢你帮助我理解!
@Embeddable
public class QuoteId implements Serializable {
    @Column(name = "symbol", insertable = false, updatable = false)
    private String symbol;
    
    @Column(name = "date", insertable = false, updatable = false)
    private Date date;
    
    public QuoteId(String symbol, Date date) {
        this.symbol = symbol;
        this.date = date;
    }
    public QuoteId() {}
    
    public String getSymbol() {
        return symbol;
    }
    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }
    ...    // other getters and setters
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        QuoteId that = (QuoteId) o;
        return Objects.equals(symbol, that.symbol) && Objects.equals(date, that.date);
    }
    @Override
    public int hashCode() {
        return Objects.hash(symbol, date);
    }   
}