WG: mappedBy problem in subclasses
> I created three entity classes:
>
> An abstract class Type
> @Entity
> public abstract class Type implements Serializable {
> private static final long serialVersionUID = 1L;
> private Long id;
> private java.sql.Timestamp Version;
>
> public Type() {
> }
>
> public void setId(Long id) {
> this.id = id;
> }
>
> @Id
> @GeneratedValue(strategy = GenerationType.AUTO)
> public Long getId() {
> return id;
> }
>
> @Version
> public Timestamp getVersion() {
> return Version;
> }
>
> public void setVersion(Timestamp Version) {
> this.Version = Version;
> }
>
>
> }
>
> A subclass "ClassDef"
>
> @Entity
> public class ClassDef extends Type implements Serializable {
> private static final long serialVersionUID = 1L;
> private String Name;
> private boolean Abstract;
> java.util.List<Attribute> Attributes;
>
> public ClassDef() {
> Attributes = new java.util.ArrayList<Attribute>();
>
>
> }
>
> @Column(nullable=false)
> public String getName() {
> return Name;
> }
>
> public void setName(String Name) {
> this.Name = Name;
> }
>
> public boolean isAbstract() {
> return Abstract;
> }
>
> public void setAbstract(boolean Abstract) {
> this.Abstract = Abstract;
> }
>
>
> @OneToMany(cascade=javax.persistence.CascadeType.ALL,mappedBy="ClassOwner")
> public List<Attribute> getAttributes() {
> return Attributes;
> }
>
> public void setAttributes(List<Attribute> Attributes) {
> this.Attributes = Attributes;
> }
>
> public void addAttribute(Attribute a) {
> Attributes.add(a);
> a.setClassOwner(this);
> }
>
> public Attribute newAttribute() {
> Attribute a = new Attribute();
> this.addAttribute(a);
> return a;
> }
>
> public Attribute getAttribute(long iID) {
> for (Attribute a:this.getAttributes()) {
> if (a.getId() == iID)
> return a;
> }
> return null;
> }
>
> public void removeAttribute(Attribute a) {
> Attributes.remove(a);
> a.setClassOwner(null);
> }
>
> }
>
> And a third class "Attribute".
>
> @Entity
> public class Attribute implements Serializable {
> private static final long serialVersionUID = 1L;
> private Long id;
> private String Name;
> private ClassDef ClassOwner;
> private Type Type;
>
>
> public Attribute() {
> }
>
> public void setId(Long id) {
> this.id = id;
> }
>
> @Id
> @GeneratedValue(strategy = GenerationType.AUTO)
> public Long getId() {
> return id;
> }
>
> @Column(nullable=false)
> public String getName() {
> return Name;
> }
>
> public void setName(String Name) {
> this.Name = Name;
> }
>
> @ManyToOne()
> @JoinColumn(nullable=false)
> public ClassDef getClassOwner() {
> return ClassOwner;
> }
>
> public void setClassOwner(ClassDef ClassOwner) {
> this.ClassOwner = ClassOwner;
> }
>
> @ManyToOne
> public Type getType() {
> return Type;
> }
>
> public void setType(Type Type) {
> if (Type == this.getClassOwner()) {
> //TODO Exception if an attribute is of the same type as his owner
> return;
> }
> this.Type = Type;
> }
>
>
>
> }
>
> The error message i get is:
>
> Internal Exception: Exception [TOPLINK-7154] (Oracle TopLink Essentials - 2.0 (Build b47-beta3 (05/16/2007))): oracle.toplink.essentials.exceptions.ValidationException
> Exception Description: The attribute [attributes] in entity class [class org.JTSoft.POEM.BaseLib.ClassDef] has a mappedBy value of [ClassOwner] which does not exist in its owning entity class [class org.JTSoft.POEM.BaseLib.Attribute]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass.
> at oracle.toplink.essentials.exceptions.EntityManagerSetupException.predeployFailed(EntityManagerSetupException.java:229)>
>
> I can't fix the problem. Where is the missing part of the puzzle?
>
> Kind regards
>
> Jürg
>
>
> -----------------------------------------------------------------------------------------------
> dipl. Informatik-Ing. ETH Jürg Treichler
> IT-Architekt
>
> Eidgenössisches Departement für Verteidigung,
> Bevölkerungsschutz und Sport VBS
> Generalsekretariat VBS
> Informatik VBS
> Maulbeerstrasse 9; 3003 Bern
> +41 (31) 324 73 42 (Tel.)
> +41 (31) 324 88 99 (Fax)
> juerg.treichler_at_gs-vbs.admin.ch
> www.vbs.admin.ch
> -----------------------------------------------------------------------------------------------
>