Did you find an answer to your question? I have a very similar problem:
BASE CLASS
=========
Code:
@javax.persistence.Entity
@javax.persistence.Table(name="ARTICLE2LOCALE")
@javax.persistence.Inheritance(strategy=javax.persistence.InheritanceType.JOINED)
@org.hibernate.annotations.Entity(dynamicUpdate=true)
public class ArticleLocalization implements org.dataisland.primitives.bean.Localization, Serializable {
public ArticleLocalization(ArticleLocalizationPK localizationPK) {
this.articleLocalizationPK = localizationPK;
}
private ArticleLocalizationPK articleLocalizationPK;
@javax.persistence.Id
public ArticleLocalizationPK getArticleLocalizationPK() {
return articleLocalizationPK;
}
public void setArticleLocalizationPK(ArticleLocalizationPK articleLocalizationPK) {
this.articleLocalizationPK = articleLocalizationPK;
}
private java.lang.String industry;
@org.hibernate.annotations.Type(type="string")
@javax.persistence.Column(name="INDUSTRY"
)
public java.lang.String getIndustry() {
return this.industry;
}
public void setIndustry(java.lang.String value) {
this.industry = value;
}
}
PKCLASS
=======
Code:
@javax.persistence.Embeddable
public class ArticleLocalizationPK implements Serializable {
private static final long serialVersionUID = 8843238238156809823L;
public ArticleLocalizationPK(Article article, Locale locale) {
this.article = article;
this.locale = locale;
}
private Locale locale;
@org.hibernate.annotations.Type(type="locale")
@javax.persistence.Column(name="LOCALE")
public Locale getLocale() {
return locale;
}
public void setLocale(Locale locale) {
this.locale = locale;
}
private Article article;
@javax.persistence.ManyToOne()
@javax.persistence.JoinColumn(name="ELEMENT_FK", insertable=false, updatable=false)
public Article getArticle() {
return this.article;
}
public void setArticle(Article article) {
this.article = article;
}
...
}
SUBCLASS
========
Code:
@javax.persistence.Entity
@javax.persistence.Table(name="ITEM_ARTICLE2LOCALE")
@javax.persistence.PrimaryKeyJoinColumns({@javax.persistence.PrimaryKeyJoinColumn(name="LOCALE", referencedColumnName="LOCALE"), @javax.persistence.PrimaryKeyJoinColumn(name="ELEMENT_FK", referencedColumnName="ELEMENT_FK")})
public class ItemArticleLocalization extends ArticleLocalization {
public ItemArticleLocalization(ArticleLocalizationPK localizationPK) {
super(localizationPK);
}
private java.lang.String name;
@org.hibernate.annotations.Type(type="string")
@javax.persistence.Column(name="NAME"
)
public java.lang.String getName() {
return this.name;
}
public void setName(java.lang.String value) {
this.name = value;
}
}
I get the following error with the previous code:
Quote:
org.hibernate.MappingException: Unable to find column with logical name: ELEMENT_FK in ARTICLE2LOCALE
And when I omit the @PrimaryKeyJoinColumns (because the doc says that it would take the same names as the parent class, I get the following exception:
Quote:
org.hibernate.MappingException: Foreign key (FK9DADD222AB4811E6:ITEM_ARTICLE2LOCALE [LOCALE])) must have same number of columns as the referenced primary key (ARTICLE2LOCALE [LOCALE,ELEMENT_FK])
If anybody has a clue, it would be greatly appreciated,
Thanks,
Francois