Java 有人能解释一下吗;实体“的映射中的重复列”;?
我不断地犯错误: org.hibernate.MappingException:实体映射中的重复列: net.teknow.moneymachine.model.Quote列:日期(应映射 使用insert=“false”update=“false”)“ 不管我怎么努力 这是我的报价课: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
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);
}
}