Creating Tables from Java Classes
Overview
While SQL DDL supports a comprehensive set of table manipulation commands, you can also create tables and build indexes directly from a POJO using a simple Java API.
This API supports custom annotations and simple builders; it works seamlessly with the Mapper interface, thus facilitating KeyValueView and RecordView.
The Java API lets you perform the following operations:
-
CREATE ZONE
-
CREATE TABLE
-
CREATE INDEX
-
DROP ZONE
-
DROP TABLE
-
DROP INDEX
-
CREATE SCHEMA
-
DROP SCHEMA
Use the @Table and other annotations located in the org.apache.ignite.catalog.annotations
package.
Examples
Key-Value POJO Compatible with KeyValueView
The example below creates a table called kv_pojo
by using the POJO compatible with KeyValueView
:
@Table(value = "kv_pojo",
zone = @Zone(value = "zone_test", replicas = 2, storageProfiles = "default"),
colocateBy = {@ColumnRef("id"), @ColumnRef("id_str")},
indexes = @Index(value = "ix", columns = {@ColumnRef("f_name"), @ColumnRef("l_name")}))
public static class PojoKey {
@Id
Integer id;
@Id(SortOrder.DEFAULT)
@Column(value = "id_str", length = 20)
String idStr;
public PojoKey(Integer id, String idStr) {
this.id = id;
this.idStr = idStr;
}
}
public static class PojoValue {
@Column("f_name")
private String firstName;
@Column("l_name")
private String lastName;
public PojoValue(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public static void main(String[] args) {
System.out.println("\nConnecting to server...");
try (IgniteClient client = IgniteClient.builder()
.addresses("127.0.0.1:10800")
.build()
) {
org.apache.ignite.table.Table myTable = client.catalog().createTable(PojoKey.class, PojoValue.class);
KeyValueView<PojoKey, PojoValue> kvView = myTable.keyValueView(PojoKey.class, PojoValue.class);
PojoKey key = new PojoKey(1, "sample");
PojoValue putValue = new PojoValue("John", "Smith");
kvView.put(null, key, putValue);
PojoValue getValue = kvView.get(null, key);
System.out.println(
"\nRetrieved values:\n"
+ " Account ID: " + key.id + '\n'
+ " First name: " + getValue.firstName + '\n'
+ " Last name" + getValue.lastName);
}
}
The result is equivalent to the following SQL multi-statement:
CREATE ZONE IF NOT EXISTS zone_test WITH PARTITIONS=2, STORAGE_PROFILES='default';
CREATE TABLE IF NOT EXISTS kv_pojo (
id int,
id_str varchar(20),
f_name varchar,
l_name varchar,
str varchar,
PRIMARY KEY (id, id_str)
)
COLOCATE BY (id, id_str)
WITH PRIMARY_ZONE='ZONE';
CREATE INDEX ix (f_name, l_name desc nulls last);
Single POJO Compatible with RecordView
The example below creates the pojo_sample
table by using the POJO compatible with RecordView
:
@Table(value = "pojo_sample",
zone = @Zone(value = "zone_test", replicas = 2, storageProfiles = "default"),
colocateBy = {@ColumnRef("id"), @ColumnRef("id_str")},
indexes = @Index(value = "ix_sample", columns = {@ColumnRef("f_name"), @ColumnRef("l_name")}))
public static class Pojo {
@Id
Integer id;
@Id(SortOrder.DEFAULT)
@Column(value = "id_str", length = 20)
String idStr;
@Column("f_name")
String firstName;
@Column("l_name")
String lastName;
String str;
}
public static void main(String[] args) {
System.out.println("\nConnecting to server...");
try (IgniteClient client = IgniteClient.builder()
.addresses("127.0.0.1:10800")
.build()
) {
org.apache.ignite.table.Table myTable = client.catalog().createTable(Pojo.class);
RecordView<Tuple> view = myTable.recordView();
Tuple insertTuple = Tuple.create()
.set("id", 1)
.set("id_str", "sample")
.set("f_name", "John")
.set("l_name", "Smith");
view.insert(null, insertTuple);
Tuple getTuple = view.get(null, insertTuple);
System.out.println(
"\nRetrieved record: " +
getTuple.stringValue("f_name")
);
}
}
The Builder Alternative to the @Table Annotation
The example below uses a builder to create a table instead on creating it from a Java class:
IgniteCatalog catalog = client.catalog();
catalog.createTable(
TableDefinition.builder("sampleTable3")
.primaryKey("myKey")
.columns(
column("myKey", ColumnType.INT32),
column("myValue", ColumnType.VARCHAR)
)
.build()
);
Table myTable = client.tables().table("sampleTable3");
myTable.keyValueView().put(null, Tuple.create().set("myKey", 1), Tuple.create().set("myValue", "John"));
Tuple value = myTable.keyValueView().get(null, Tuple.create().set("myKey", 1));
System.out.println(
"\nRetrieved value:\n" +
value.stringValue("myValue")
);
Next Steps
Once you have created a table using the Java API, you can manipulate it using the SQL commands.
© 2025 GridGain Systems, Inc. All Rights Reserved. Privacy Policy | Legal Notices. GridGain® is a registered trademark of GridGain Systems, Inc.
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.