When working with Apache Cassandra, one powerful feature is the use of User-Defined Types (UDTs) — allowing you to define complex, nested structures similar to objects in programming. In Java applications, converting your domain objects to UDT values (UdtValue) is essential for seamless integration with your Cassandra database. This article guides you through the process of converting a Java object into a UdtValue using the DataStax Java Driver for Cassandra.
What is a UDT in Cassandra?
A User-Defined Type (UDT) in Cassandra lets you group related fields together. For example:
CREATE TYPE my_keyspace.my_udt (
id int,
name text,
description text
);
This UDT can then be used as a column type in your tables to store structured data.
Use Case: Java to Cassandra UDT Mapping
Imagine you have a Java class that mirrors the structure of my_udt. You want to store instances of this class into a Cassandra table that accepts the UDT.
Step-by-Step Guide to Convert Java Objects to UdtValue
1. Add Cassandra Driver Dependency
If you’re using Maven, add the DataStax driver:
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>java-driver-core</artifactId>
<version>4.17.0</version> <!-- or latest stable -->
</dependency>
2. Define Your Java Class
public class MyUdt {
private int id;
private String name;
private String description;
// Constructors
public MyUdt(int id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}
// Getters
public int getId() { return id; }
public String getName() { return name; }
public String getDescription() { return description; }
}
3. Connect to Cassandra
import com.datastax.oss.driver.api.core.CqlSession;
try (CqlSession session = CqlSession.builder().withKeyspace("my_keyspace").build()) {
// Proceed with UDT operations
}
4. Retrieve the UDT Metadata and Build UdtValue
import com.datastax.oss.driver.api.core.type.UserDefinedType;
import com.datastax.oss.driver.api.core.data.UdtValue;
UserDefinedType udtType = session.getMetadata()
.getKeyspace("my_keyspace")
.flatMap(ks -> ks.getUserDefinedType("my_udt"))
.orElseThrow(() -> new IllegalStateException("UDT not found"));
MyUdt myObject = new MyUdt(1, "Sample Name", "Sample Description");
UdtValue udtValue = udtType.newValue()
.setInt("id", myObject.getId())
.setString("name", myObject.getName())
.setString("description", myObject.getDescription());
5. Insert UdtValue into a Cassandra Table
Assume you have a table that uses this UDT:
CREATE TABLE my_keyspace.my_table (
key text PRIMARY KEY,
details my_udt
);
You can insert your UDT as follows:
session.execute("INSERT INTO my_table (key, details) VALUES (?, ?)",
"user_123", udtValue);
Final Thoughts
Using Java UDT mapping with Cassandra helps keep your data model clean and object-oriented. By leveraging UdtValue, you can store complex structures directly in your Cassandra database, ensuring consistency and type safety between your Java application and your database schema.
Related Keywords for SEO
- Java Cassandra UdtValue example
- How to map Java class to Cassandra UDT
- Cassandra UDT Java DataStax driver tutorial
- Insert UDT value into Cassandra table from Java
- User Defined Type Cassandra Java Integration
- Cassandra complex types with Java


