2010-11-19 56 views
2

J'ai une classe de données que je persiste en utilisant JDO sur GWT et qui ont besoin de stocker deux ensembles de mêmes classes séparément, un ensemble est des données brutes et l'autre fusionné et traité.
Y at-il un moyen facile de le faire, ont essayé de le trouver dans les docs sans succès.Plusieurs tables pour une seule classe dans JDO (GWT)

Merci, Aron.

Répondre

2

Non. JDO ou JPA n'accepteraient pas une telle chose. Il est évident que vous pourriez sous-classer la classe et avoir la sous-classe pour les données amalgamées/traitées et les stocker dans sa propre table

+0

Merci beaucoup, je me demandais si ce serait le cas. Avec le sous-classement, je peux voir quelques mécanismes, par exemple class processedData étend RawData comme un mécanisme ou une classe processedData étend BaseData et la classe RawData étend BaseData comme un autre. Des réflexions sur les mérites de l'une ou l'autre approche? – aronp

+0

Étant donné qu'il existe un certain nombre de façons de faire cela qui ne fonctionnent pas très bien, suivre est un moyen que je dois travailler. – aronp

1

Comme une mise à jour, étant donné qu'il existe plusieurs façons de tenter de sous-classer ou d'incorporer les données dans une autre classe , dont beaucoup ne fonctionnent pas très bien (sur GWT), voici deux schémas qui fonctionnent. Dans la première, les principales caractéristiques sont que la clé primaire est dans la classe de base, et la stratégie d'héritage est SUBCLASS_TABLE. Notez que cela signifie que BaseData ne peut pas être persisté. Un second mécanisme est illustré ci-dessous. Dans ce document la classe de base est une classe régulière qui peut être persisté et la classe dérivée a une stratégie d'héritage de customStrategy = "complète table"

1)

@PersistenceCapable 

@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) 

public class BaseData 
{ 
    @PrimaryKey 

    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    public Long id; 

    // scan data 
    @Persistent 
    public String Data1 = ""; 
    // etc... 
} 

@PersistenceCapable 
public class ProcessedData extends BaseData 
{ 
    // No key 
    // Thats it 
} 

@PersistenceCapable 
public class RawData extends BaseData 
{ 
    // No key 
    // Thats it 
} 

2)

@PersistenceCapable 
@Inheritance(customStrategy = "complete-table") 

public class ProcessedData extends RawData 
{ 
// thats it 
} 

@PersistenceCapable 
public class RawData 
{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    public Long id; 

    @Persistent 
    public String Data1 = ""; 

    // ... 
}