У меня есть следующий класс:
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class TclRequest implements Comparable<TclRequest> {
@PrimaryKey
private String id;
@Persistent(types = { DNSTestData.class, POP3TestData.class, PPPoETestData.class, RADIUSTestData.class }, defaultFetchGroup = "true")
@Columns({ @Column(name = "dnstestdata_fk"), @Column(name = "pop3testdata_fk"), @Column(name = "pppoetestdata_fk"), @Column(name = "radiustestdata_fk") })
private TestData testData;
public String getId() {
return id;
}
public TestData getTestData() {
return testData;
}
public void setId(String id) {
this.id = id;
}
public void setTestData(TestData testData) {
this.testData = testData;
}
}
Интерфейс TestData выглядит следующим образом:
@PersistenceCapable(detachable = "true")
public interface TestData {
@PrimaryKey
public String getId();
public void setId(String id);
}
Что реализовано многими классифицированными, включая этот:
@PersistenceCapable(detachable = "true")
public class RADIUSTestData implements TestData {
@PrimaryKey
private String id;
private String password;
private String username;
public RADIUSTestData() {
}
public RADIUSTestData(String password, String username) {
super();
this.password = password;
this.username = username;
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
}
Когда я пытаюсь сохранить класс TclRequest, после его создания и использования RADIUSTestData:
//'o' is the constructed TclRequest object.
PersistenceManager pm = null;
Transaction t = null;
try {
pm = getPM();
t = pm.currentTransaction();
t.begin();
pm.makePersistent(o);
t.commit();
} catch (Exception e) {
e.printStackTrace();
if (t != null && t.isActive()) {
t.rollback();
}
} finally {
closePM(pm);
}
Поле интерфейса не сохраняется. И столбец не создается в таблице! Я включил режим отладки и нашел 2 броские вещи:
1)
-Class com.skycomm.cth.beans.ixload.radius.TestData, указанный для использования "идентификатора приложения", но не был указан "objectid-class". Возврат к javax.jdo.identity.StringIdentity
2)
- Обеспечение достижимости на ПК поле «com.skycomm.cth.beans.TclRequest.testData»
-Не удалось найти StateManager для объекта ПК "" в поле "com.skycomm.cth.beans.TclRequest.testData" - игнорирование для достижимости
Что бы это могло значить?
Заранее спасибо.