Announcement

Collapse
No announcement yet.

EJB-Vererbung über mehrere Module

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EJB-Vererbung über mehrere Module

    Ich habe folgendes Problem. Ich möchte gerne in einem EJB-Projekt von einer andern Entity-Klasse ableiten, die in einem anderen EJB-Projekt liegt. Ich verwende dazu Eclipse Ganymede, GlassFish 2.1 mit EclipseLink 1.1.0. Aber die entsprechenden Spalten von der Basisklasse werden mir in der Datenbank nicht mit angelegt. Es folgt auch keine Fehlermeldung. EclipseLink ignoriert das einfach.

    Hier ein kleines Beispiel:

    Entity-Klasse im EJB-Projekt "BasisEJB"
    Code:
    @Entity
    @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
    public abstract class Basis {
       @Id
       @GeneratedValue
       private long id;
       private String name;
       ...
    }
    Entity-Klasse im EJB-Projekt "TestEJB"
    Code:
    @Entity
    public class Test extends Basis {
       @Id
       @GeneratedValue
       private long id;
       private long wert;
       ...
    }
    Für die Test-Klasse wird jedoch nur eine Tabelle mit den Spalten ID und WERT angelegt. Die Spalte NAME von der Basis-Klasse fehlt leider. Dabei ist es egal, ob beide EJB-Projekte per JTA-DataSource die selbe oder unterschiedliche Datenbanken benutzen.

    Hat jemand da eine Idee, an was das liegen könnte?

  • #2
    M.E. ist

    @Id
    @GeneratedValue
    private long id;

    ist der Testklasse nicht erforderlich
    Christian

    Comment


    • #3
      EJB-Vererbung über mehrere Module

      Hallo Christian,

      danke für deine Informationen. Ich dachte eigentlich auch, dass das zusätzliche Id-Feld in der Test-Klasse nicht nötig ist, da es in der Basis-Klasse ja schon vorkommt. Da es aber Probleme mit der modulübergreifenden Vererbung gibt, meckert Eclipse, wenn ich in der Test-Klasse keinen Primärschlüssel angebe. Genauer gesagt wird bei der Annotation @Entity der Fehler angezeigt, dass die Entität eine Id oder EmbeddedId haben muss. Deshalb habe ich sie hinzugefügt.

      Comment


      • #4
        Hallo ExodusChild,

        in der EJB-Doku von Hibernate (http://www.hibernate.org/hib_docs/an...ml/entity.html) ist im Kapitel 2.2.4.4. Inherit properties from superclasses erklärt, was Du brauchst. Es sind die Annotations @MappedSuperclass und @Basic.

        Gruß ngomo
        Zuletzt editiert von ngomo; 20.03.2009, 19:11. Reason: Basic verschrieben
        http://www.winfonet.eu

        Comment


        • #5
          EJB-Vererbung über mehrere Module

          Hallo ngomo,

          danke für deinen Hinweis. Mit @MappedSuperclass hat alles einwandfrei funktioniert, auch über Projekt- bzw. Modulgrenzen hinaus. Dadurch erübrigt sich auch das "doppelte" ID-Feld in der Basis-Klasse, da auch nicht versucht wird, die abstracte Basis-Klasse zu persistieren.

          Also nochmals danke.

          PS: Übrigens ist die Annotation @MappedSuperclass nicht nur auf Hibernate beschränkt, sondern Teil der JPA 1.0 Spezifikation und wird somit z.B. auch von EclipseLink unterstützt.

          Comment

          Working...
          X