Ich arbeite an der Zuordnung von zwei Tabellen mit minimalen Unterschieden in Cassandra, aber Kundera ist nicht mein Modell korrekt zuordnen (Ich habe es konfiguriert, um Zuordnungen gegen Tabellen auf EntityManager zu überprüfen Schaffung). Angesichts der folgenden Verbindung Schlüssel (strukturierte these directions, since paging is desired nach und zusätzlich die DataStax Treiber:Kundera-Cassandra Compound-Schlüssel für Entitäten mit MappedSuperClass nicht zuordnen
CQL Tabelle für beide Tabellen haben die folgende Primärschlüssel erzeugt:
PRIMARY KEY ((key1, key2, key3, key4, key5, key6, key7, key8, key9, key10, key11), "clusteringKey")
PartitionKey:
@Embeddable
public class PartitionKey {
@Column
private key1
//repeat for 11 more keys
}
ClusteringKey :
@Embeddable
public class ClusteringKey {
@Embedded
private PartitionKey key;
@Column
private UUID clusteringKey;
}
Prope rties laden für CQL3:
public static EntityManagerFactory getEntityManagerFactory() throws IOException {
if(entityManagerFactory == null) {
entityManagerFactory = Persistence.createEntityManagerFactory("cassandra_pu",getProperties());
}
return entityManagerFactory;
}
public static Properties getProperties() throws IOException {
if(properties == null) {
properties = new Properties();
properties.load(Application.class.getResourceAsStream("/application.properties"));
properties.put(CassandraConstants.CQL_VERSION, CassandraConstants.CQL_VERSION_3_0);
}
return properties;
}
Ich habe bisher zwei Modelle versucht.
Der erste Fall:
SuperRecord:
@MappedSuperClass
public abstract class SuperRecord {
@EmbeddedId
private ClusteringKey clusteringkey;
//Additional Fields
}
//extended by StagingRecord, ProductionRecord
Während ClusteringKey selbst richtig abbildet, nichts zu PartitionKey bezogen auf alle Karten.
In meinem zweiten Versuch:
SuperRecord:
@MappedSuperClass
public abstract class SuperRecord {
//Common fields excluding keys
}
StagingRecord:
@Entity
public class StagingRecord extends SuperRecord {
@EmbeddedId
private ClusteringKey key;
}
ProductionRecord:
@Entity
public class ProductionRecord extends SuperRecord {
@EmbeddedId
private ClusteringKey key;
@Column(name="solr_query")
private String solrQuery;
}
In diesem Versuch, während mein Clustering ke y maps, wird mein Partitionskey als einzelnes binäres Objekt und nicht wie gewünscht als einzelne Spalten abgebildet.
Was verhindert, dass mein PartitionKey entsprechend zugeordnet wird und wie behebe ich es?
Edit:
Nach den übergeordneten Klasse Felder zu verteilen, fand ich, dass die @MappedSuperclass
kein Faktor in meiner Ausgabe ist; nur die verschachtelten @Embeddeds
. Wenn ich die Klassen PartitionKey und ClusteringKey zusammenführen würde, würde das Mapping die Validierung ebenfalls bestehen (obwohl es nicht möglich wäre, die Token-Methodensignatur im generierten CQL für die Paginierung korrekt zu erstellen, da mein Modell nicht mehr den Erwartungen für diese Funktionalität entspricht).
Haben Sie CQL3 beim Erstellen von Tabellen aktiviert? –