Я использую Datanucleus (jdo) с дерби, и у меня есть класс MyClass.И этот класс имеет переменную типа AnotherClass.Я хочу сохранить эту переменную.Когда экземпляр MyClass сохраняется, переменная AnotherClass также сохраняется.
Теперь проблема: когда я сохраняю новый MyClass, и этот экземпляр имеет тот же экземпляр AnotherClass, что и переменная, в которую я не хочу сохранять егоснова таблицу AnotherClass, но просто укажите ее по идентификатору в таблице MyClass.Иначе в моей таблице AnotherClass будут сохранены тонны того же экземпляра.
В данный момент мой класс выглядит следующим образом:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MyClass implements Serializable {
private static final long serialVersionUID = -5074030667922748006L;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Long key;
@Persistent
AnotherClass anotherClass;
Обновление:
Класс AnotherClass выглядит следующим образом:класс MyClass.
Полагаю, ответ Тома Андерсона был уже правильным.Я создаю новые экземпляры AnotherClass и помещаю их в экземпляр MyClass, например myClass.setAnotherClass (anotherClass).Поэтому я предполагаю, что anotherClass - это экземпляр с теми же значениями, но он все еще не тот же, поэтому он получает свою собственную строку в базе данных, даже если он там выглядит абсолютно идентично (кроме идентификатора).
Так что япредположим, что решение будет таким: Проверьте, сохранился ли экземпляр AnotherClass в базе данных, если да, получите его из базы данных и установите для этого экземпляра myClass.Если нет: создайте новый экземпляр и установите для него myClass, чтобы он сохранялся при сохранении myClass.Это то, как я должен это делать?
РЕДАКТИРОВАТЬ: Хорошо, теперь у меня есть новая проблема: я больше не могу удалять экземпляры MyClass (= Character).Если я пытаюсь сделать это, я получаю следующее исключение (AnotherClass = Faction):
java.sql.SQLIntegrityConstraintViolationException: DELETE on table 'FACTION' caused a violation of foreign key constraint 'CHARACTER_FK1' for key (1). The statement has been rolled back.
Это просто произошло, когда я сделал это: создаю персонажа 1, создаю персонажа 2 точно такой же фракции (это только в базе данных один раз), попробуйте удалить персонаж2.Есть идеи, почему?
EDIT2: Забыл что-то важное:
@Persistent(dependent = "true")
Faction faction;
Так говорит мой класс персонажей.У меня есть это, потому что я хочу, чтобы фракция была удалена, если ни один персонаж не использует ее.Я полагаю, в этом проблема?Как я могу сделать это сейчас?