Selbstreferenzierter Entity-Bean

Status
Nicht offen für weitere Antworten.

akira

Bekanntes Mitglied
Hallo zusammen,

ich versuche mich zur Zeit etwas in den Java Application Server 9 einzuarbeiten und bin auf ein Problem mit einem selbstreferenzierten Entity-Bean gestoßen.

Ich habe eine Entity GroupEntity, die für eine Benutzergruppe stehen soll. Das Bean hat einen zusammengesetzen Key aus der Group-Id und einer Domain-Id, zu der die Gruppe gehört. Zusätzlich kann eine Gruppe auch eine Vater-Gruppe haben oder selbst Vater mehrere Untergruppen sein.

Hier erstmal der Code, zuerst der Key, dann der Bean

Code:
public class GroupKey implements Serializable {
    
    private Long domainId;
    
    private Long groupId;
    
    public GroupKey() {
    }

    public Long getDomainId() {
        return domainId;
    }

    public void setDomainId(Long domainId) {
        this.domainId = domainId;
    }

    public Long getGroupId() {
        return groupId;
    }

    public void setGroupId(Long groupId) {
        this.groupId = groupId;
    }
}


Code:
@IdClass(esp.ums.entities.key.GroupKey.class)
@Entity
@Table(name = "ESP_UMS_GROUP")
public class GroupEntity implements Group, Serializable {

    private DomainEntity domainEntity;
    
    private GroupEntity parentEntity;
    
    private Collection<GroupEntity> children;
    
    private Long domainId;
    
    private Long groupId;
    
    private String groupName;
    
    private String description;
    
    public GroupEntity() {
    }
    
    public GroupEntity(Group group) {
        if(group!=null)
            BeanHelper.copy(group, this, Group.class);
    }
    
    @Transient
    public GroupBean getBean() {
        return new GroupBean(this);
    }
    
    @Id
    @Column(name="GROUP_ID")
    @GeneratedValue(strategy = GenerationType.TABLE, generator="GROUP_TAB")
    public Long getGroupId() {
        return groupId;
    }

    public void setGroupId(Long groupId) {
        this.groupId = groupId;
    }
    
    @Id
    @Column(name = "DOMAIN_ID", nullable = false, insertable = false, updatable = false)
    public Long getDomainId() {
        return domainId;
    }
    
    @Transient
    public Domain getDomain() {
        return getDomainEntity().getBean();
    }
    
    public void setDomain(Domain domain) {}

    public void setDomainId(Long domainId) {
        this.domainId = domainId;
    }

    @ManyToOne
    @JoinColumn(name = "DOMAIN_ID")
    public DomainEntity getDomainEntity() {
        return domainEntity;
    }

    public void setDomainEntity(DomainEntity domainEntity) {
        this.domainEntity = domainEntity;
    }
    
    
    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
    
    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "PARENT_GROUP_ID",referencedColumnName = "GROUP_ID")
        , @JoinColumn(name = "PARENT_DOMAIN_ID", referencedColumnName = "DOMAIN_ID")
    })
    public GroupEntity getParentEntity() {
        return parentEntity;
    }
    
    public void setParentEntity(GroupEntity parent) {
        this.parentEntity = parent;
    }
    
}

Beim deployen bekomme ich folgende Fehler:

JDO76609: Got SQLException executing statement "ALTER TABLE ESP_UMS_GROUP ADD CONSTRAINT SPMSGRUPPRNTGRUPID FOREIGN KEY (PARENT_GROUP_ID) REFERENCES ESP_UMS_GROUP (GROUP_ID)": org.apache.derby.client.am.SqlException: Constraint 'SPMSGRUPPRNTGRUPID' is invalid: there is no unique or primary key constraint on table 'ESP.ESP_UMS_GROUP' that matches the number and types of the columns in the foreign key.
JDO76609: Got SQLException executing statement "ALTER TABLE ESP_UMS_GROUP ADD CONSTRAINT SPMSGRPPRNTDMAINID FOREIGN KEY (PARENT_DOMAIN_ID) REFERENCES ESP_UMS_GROUP (DOMAIN_ID)": org.apache.derby.client.am.SqlException: Constraint 'SPMSGRPPRNTDMAINID' is invalid: there is no unique or primary key constraint on table 'ESP.ESP_UMS_GROUP' that matches the number and types of the columns in the foreign key.

Ich wolte die Parent-Id eigentlich nicht in den Key mit aufnehmen, da es auch eine root-Gruppe ohne Vater möglich sein soll.

Hat vielleicht jemand eine Idee wie ich das realisieren kann oder was falsch ist? Laut einem Tutorial sollte es eigentlich so gehen.

mfg
 
G

Guest

Gast
Eine Lösung habe ich auch nicht, aber wenn kein zwingender Grund vorliegt, auf den zusammengesetzten
Primary-Key zu verzichten, würde ich es wie folgt machen. Über Named-Queries kommst du viel einfacher
an die Top-Level-Gruppen heran.
(auf Constraints wie nullable, updatable etc. habe ich hier bewusst verzichtet, damit es nicht ablenkt)
Code:
@Entity
public class Domain implements Serializable
{
   private static final long serialVersionUID = ...;

   @Id
   @Column( name = "ID" )
   private Long id = null;

   @OneToMany( mappedBy = "domain" )
   private Set<Group> groups = new HashSet<Group>();

   ... Konstruktor(en), Getter/Setter und sonstige Felder
}

@Entity
@NamedQueries(
  {
    @NamedQuery(
      name  = "TopLevelGroupsByDomain",
      query = "from Group g where g.domain.id = :domainId and g.parent is null"
    )
  }
)
public class Group implements Serializable
{
   private static final long serialVersionUID = ...;

   @Id
   @Column( name = "ID" )
   private Long id = null;

   @ManyToOne( optional = false )
   @JoinColumn( name = "DOMAIN_ID" )
   private Domain domain = null;

   @ManyToOne( optional = true )
   @JoinColumn( name = "PARENT_ID" )
   private Group parent = null;

   @OneToMany( mappedBy = "parent" )
   private Set<Group> children = new HashSet<Group>();

   ... Konstruktor(en), Getter/Setter und sonstige Felder
}
 
G

Guest

Gast
Vielen Dank für den Tip mit den Named-Queries, werde ich nachher gleich mal probieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Hibernate - OneToMany - mappedBy reference an unknown target entity property Allgemeines EE 1
T Anfängerfrage: h:selectOneMenu (JSF 2.0), @ManyToOne Annotation in Entity (JPA 2.0) Allgemeines EE 2
P detached entity passed to persist Allgemeines EE 5
H Bezug Entity<=>DB Allgemeines EE 5
I Entity wirft Nullpointer Allgemeines EE 2
J Datenbankmanipulation, methoden des Entity-Managers ? Allgemeines EE 3
F mappedBy reference an unknown target entity property Allgemeines EE 5
ichbindiegute Performance von Entity Bean create vs. JDBC insert Allgemeines EE 11
S EJB Entity Beans -> CMP Allgemeines EE 11
S Löschen einer Entity kaskadiert nicht auf Collection (1:n) Allgemeines EE 2
G Entity Bean ignoriert Datenbank Allgemeines EE 16
G JBoss - Session / Entity Allgemeines EE 8
G Persistenz-Entscheidung (Entity Beans, Hibernate, JDBC) Allgemeines EE 12
M Session Bean vers. Entity Bean Allgemeines EE 3
M Entity Beans: Rückgabe von Collectionen an Client Allgemeines EE 2
R JSF Entitybean direkt in Sessionscoped Bean referenzieren Allgemeines EE 2
I Session löschen in Bean (Session Beans) Allgemeines EE 1
J Hello World mit Stateless Session Bean - Was mache ich falsch? Allgemeines EE 2
J Unterschied zwischen HttpSession und Stateful Session Bean Allgemeines EE 3
R Wie eine stateful session bean erneut "aufgreifen" Allgemeines EE 22
B [EJB] javax.inject.DefinitionException: bean not a Java type Allgemeines EE 5
T Einstieg in J2EE: Remote auf Bean zugreifen Allgemeines EE 11
H Bean läuft unter GlassFish, aber JBoss nicht Allgemeines EE 5
P Unterschied Session Scope / Stateful Session Bean Allgemeines EE 6
A Im PhaseListener auf Stateful Session Bean zugreifen Allgemeines EE 6
J geschützter Bean zugriff mit einem Rich-Client Allgemeines EE 2
2 JSTL Tags für eine Bean? Allgemeines EE 4
M Spring: Bean als Webservice freigeben Allgemeines EE 9
D Problem mit EJB: Bean soll Objekt eigener Klasse zurückgeben Allgemeines EE 2
V JSP BEAN Speichern von einer Zahl nach eingabe Allgemeines EE 2
H Bean Vergleich.gibts da schon was Feines? Allgemeines EE 13
B unterschied servlet und bean Allgemeines EE 2
F response.sendError() von Bean aus Allgemeines EE 6
A Session Bean mit Local-Interface nutzen Allgemeines EE 3
J prozesse aus der application-bean threadfähig? Allgemeines EE 4
G JSF dynamsiche style zuweisung aus Backing Bean Allgemeines EE 3
G Objekt von jsp an set Methode von Bean übergeben! Allgemeines EE 2
N Lokation von Bean Klassen? Allgemeines EE 5
M JSF Bean-Property mit Parameter aufrufen Allgemeines EE 12
M JSF & EJB "Bean not bound" Problem Allgemeines EE 4
R Zugriff auf Managed Bean aus einem Filter Allgemeines EE 2
boxi JSF von einem Bean auf ein anderes Bean zugreifen Allgemeines EE 3
J Bean in der init-Methode des Servlets instanzieren Allgemeines EE 9
Y JSF - einzelne Bean zerstören/ungültig machen Allgemeines EE 2
S In einer Bean-Methode an ndere Beans kommen Allgemeines EE 7
RaoulDuke EJB 3.0 - Exceptions aus Methoden einer Session Bean Allgemeines EE 2
V Bean-Daten in JSF-JSP finden Allgemeines EE 3
J In einem Bean zugriff auf ein SessionBean? Allgemeines EE 2
F Session Bean -> Daten aus dem Servlet holen Allgemeines EE 11
F Package beim Cookie-setzten über BEAN nicht gefunden Allgemeines EE 4
M STRUTS/Cannot retrieve definition for form bean null on acti Allgemeines EE 4
E Methoden einer Bean aufrufen? Allgemeines EE 4
P jsf SelectOneMenu: Bean als SelectItem Value Allgemeines EE 5
P Struts Form Bean vs. Session Variable Allgemeines EE 6
G Exception creating bean of class . (Struts) Allgemeines EE 8
T statische Methoden versus Application-Bean Allgemeines EE 2
N Duplicate Bean Name (Tomcate 5.X, JDK 1.5) Allgemeines EE 2
M Unterschied zwischen Servlet und Bean/EJB Allgemeines EE 2
flashfactor Logging in einem Session-Bean Allgemeines EE 2
N Einbindung einer Bean in eine JSP (Tomcat-Server 5.5.x) Allgemeines EE 2
H Sichtbarkeit von Bean-Modifikationen? Allgemeines EE 2
H JSP, Session und Java-Bean Allgemeines EE 4
R html-form mit bean:write Allgemeines EE 10
R Use bean in scriptlet in struts Allgemeines EE 4
N Deployen einer EJB3.0 Bean Allgemeines EE 4
U Enterprise Bean mit dynamischer Datenbankauswahl? Allgemeines EE 3
T Filesystemzugriff von einer Bean? Allgemeines EE 6
C Mail von einer Session Bean aus senden Allgemeines EE 2
C Message Driven Bean soll keine Nachrichten empfangen Allgemeines EE 4
A Begriffe MBean JMX-Bean? Allgemeines EE 2
K JAVA BEAN DB Connection Prob Allgemeines EE 5
B Kein definiertes Bean? --- JDeveloper Allgemeines EE 5
C JSP mit java Bean Allgemeines EE 22
T Bean übertragen von Servlet zu Servlet Allgemeines EE 9
T Variablen von Bean über Servlet setzen Allgemeines EE 5
S XML parsen in Bean Allgemeines EE 2
G Instanzvariablen mit Strings in Bean vergleichen... Allgemeines EE 3
S Struts: Problem mit <bean:message> - Tag Allgemeines EE 1
A Kommunikation zwischen Java Servlet und Bean Allgemeines EE 1

Ähnliche Java Themen


Oben