Ich habe drei Entitäten Benutzer, Firma und Adresse mit Erklärungen wie folgt:Probleme mit Besitz 12.59 Beziehungen und Eltern/Kind-Beziehungen
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent(mappedBy="creator")
@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="title asc"))
private Collection<Company> companies;
@Persistent
private Address address;
. . .
}
public class Company implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
@Extension(vendorName="datanucleus", key="gae.parent-pk", value="true")
private Key creatorKey;
@Persistent
private User creator;
@Persistent
private Address address;
. . .
}
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Address implements Serializable{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
. . .
}
Nach Erstellen eines Benutzers ich bestehen dann zwei von einem Benutzer gehören Unternehmen nach ihren Adressen und andere Informationen wie so einstellen:
company.setCreatorKey(currentUser.getKey());
pm.makePersistent(company);
Das Problem entsteht, wenn ich ein Unternehmen abrufen und von diesem Objekt verweisen auf den Schöpfer. Anscheinend denkt JDO, dass die Adressen der beiden Unternehmen den Nutzer gehören zu den Unternehmen gegenüber und der folgende Fehler protokolliert:
address is mapped as a 1 to 1 relationship but there is more than one enity of kind Address that is a child of User([email protected])
Der Schlüssel des Benutzers
User([email protected])
der Schlüssel von dem ist Unternehmen ist
User([email protected])\Company(1)
und der Schlüssel der beiden Adressen sind
User([email protected])\Company(1)\Address(1)
User([email protected])\Company(1)\Address(2)
Ich bin ziemlich neu in hierarchischen Datenbanken, also habe ich mich gefragt, warum die beiden Adressen als Kinder von Benutzer statt Nachkommen von Benutzer und Kinder der Firma persistent/interpretiert werden. Was ist die richtige Hierarchie für eine Situation wie diese? Vielen Dank.
Das Herunterladen des neuen SDK (1.2.2) hat funktioniert. Ich habe vorher 1.2.1 benutzt, welches das Problem/Defekt hatte. Danke Peter. –