【问题标题】:ReferencedColumnNames not mapped to a single propertyReferencedColumnNames 未映射到单个属性
【发布时间】:2013-12-17 11:23:15
【问题描述】:

我有 2 个 Hibernate 实体 Entities: LanguageToLocaleJpaImplLocaleJpaImpl 的 2 个不同实例有 2 个关联。

LanguageToLocaleJpaImpl 具有以下外键:

当我启动 Tomcat 服务器时,我收到此异常:

LanguageToLocaleJpaImpl 中引用 LocaleJpaImpl 的 ReferencedColumnNames 未映射到单个属性

我真的不知道是什么原因造成的。 你能帮忙吗?

这是 LanguageToLocaleJpaImpl 类:

@Entity
@Table(name = "LANGUAGE_TO_LOCALE")
@XmlRootElement

public class LanguageToLocaleJpaImpl extends BaseEntityJpaSupport implements Serializable, LanguageToLocale {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @GeneratedValue( strategy = GenerationType.AUTO)
    @Column(name = "LANGUAGE_TO_LOCALE_ID")
    private Integer languageToLocaleId;

    @Basic(optional = false)
    @NotNull
    @Column(name = "ACTIVE_FLAG")
    private boolean activeFlag;

    @Basic(optional = false)
    @NotNull
    @Column(name = "DEFAULT_FLAG")
    private boolean defaultFlag;

    @Column(name = "CREATED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    @Column(name = "UPDATED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date updatedDate;

    @JoinColumn(name = "LOCALE_ID", referencedColumnName = "LOCALE_ID")
    @ManyToOne(optional = false)
    private LocaleJpaImpl country;

    @JoinColumn(name = "LANGUAGE_ID", referencedColumnName = "LOCALE_ID")
    @ManyToOne(optional = false)
    private LocaleJpaImpl language;    

    public LanguageToLocaleJpaImpl() {
    }

    // Getters e Setters, Hashcode, Equals, toString...
}

这是LocaleJpaImpl

@Entity
@Table(name = "LOCALE")
@XmlRootElement
public class LocaleJpaImpl extends BaseEntityJpaSupport implements java.io.Serializable {   

    private static final long serialVersionUID = 1L;

    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "LOCALE_ID")
    private int localeId;

    @Basic(optional = false)
    @NotNull
    @Column(name = "CREATED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    @Size(max = 2)
    @Column(name = "LANGUAGE_CODE")    
    private String languageCode;

    @Size(max = 2)
    @Column(name = "COUNTRY_CODE")    
    private String countryCode;

    @Size(max = 10)
    @Column(name = "VARIANT_CODE")
    private String variantCode;

    @Size(max = 100)
    @Column(name = "FLAG_ICON_URL")
    private String flagIconUrl;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "language")
    private List<LanguageToLocaleJpaImpl> languageList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "country")
    private List<LanguageToLocaleJpaImpl> countryList;

    public LocaleJpaImpl() {
    }

    @XmlTransient
    public List<LanguageToLocaleJpaImpl> getLlanguageList() {
        return languageList;
    }

    public void setlanguageListList(List<LanguageToLocaleJpaImpl> languageList) {
        this.languageList = languageList;
    }

    @XmlTransient
    public List<LanguageToLocaleJpaImpl> getCountryList() {
        return countryList;
    }

    public void setCountryList(List<LanguageToLocaleJpaImpl> countryList) {
        this.countryList = countryList;
    }   

    // Getters e Setters, Hashcode, Equals, toString...

}

【问题讨论】:

    标签: hibernate jakarta-ee jpa


    【解决方案1】:

    据我所知,Hibernate 已经识别了关联 LocaleJpa 的主键,因此认为有 2 个外键定义了两个类之间的关系。 我解决了删除 @Id 注释的问题,而是添加了

    @AttributeOverride(name="id", column=@Column(name="LOCALE_ID"))
    

    在类签名之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多