Благодаря комментариям пользователя DataNucleus и документации с официального сайта, вот что мне не хватало.
ElementOne нужен класс PrimaryKey , чтобы мы могли использовать конструктор, принимающий строковый аргумент в основном классе 'PrimaryKey.
Класс ElementOne PrimaryKey:
public static class PK implements Serializable
{
public Long idElementOne;
public PK()
{
}
public PK(String s)
{
this.idElementOne = Long.valueOf(s);
}
public String toString()
{
return "" + idElementOne;
}
//...
}
Основной класс с классом PrimaryKey:
@PersistenceCapable(objectIdClass=PK.class)
public class MainClass{
@PrimaryKey
@Column(name = idElementOne, allowsNull = "false")
private ElementOne elementOne;
@PrimaryKey
@Column(name = "idElementTwo", allowsNull = "false");
private Long idElementTwo;
//...
public static class PK implements Serializable
{
public Long idElementTwo; // Same name as real field in the main class
public ElementOne.PK elementOne; // Same name as the real field in the main class
public PK()
{
}
public PK(String s)
{
String[] constructorParam = s.split("::");
this.idElementTwo= Long.parseLong(constructorParam[1]);
this.personne = new Personne.PK(constructorParam[2]);
}
public String toString()
{
return "" + idElementTwo+ "::" + this.personne.toString();
}
//...
}
}
PS: Примеры с сайта DataNucleus используют StringTokenizer , который не реализован в GWT , вместо этого используйте String.split (). Кроме того, в документе Java говорится, что:
StringTokenizer - это устаревший класс, который
сохраняется по соображениям совместимости
хотя его использование не рекомендуется в новых
код. Рекомендуется, чтобы кто-нибудь
ища эту функциональность использовать
метод разделения строки или
Вместо этого пакет java.util.regex.