#1
This guide shows how to use graph data models in SAP HANA Express with Spring Boot for storing and querying connected data.

1. Create Graph Workspace in HANA

First, create tables for nodes and edges:
CREATE COLUMN TABLE PERSON (
    ID INTEGER PRIMARY KEY,
    NAME NVARCHAR(100)
);

CREATE COLUMN TABLE FRIENDSHIP (
    SOURCE INTEGER,
    TARGET INTEGER,
    FOREIGN KEY (SOURCE) REFERENCES PERSON(ID),
    FOREIGN KEY (TARGET) REFERENCES PERSON(ID)
);
Create graph workspace:
CREATE GRAPH WORKSPACE SOCIAL_GRAPH
   EDGE TABLE FRIENDSHIP
   SOURCE COLUMN SOURCE
   TARGET COLUMN TARGET
   VERTEX TABLE PERSON
   KEY COLUMN ID;

2. Insert Sample Data

INSERT INTO PERSON VALUES (1, 'Alice');
INSERT INTO PERSON VALUES (2, 'Bob');
INSERT INTO PERSON VALUES (3, 'Charlie');

INSERT INTO FRIENDSHIP VALUES (1, 2);
INSERT INTO FRIENDSHIP VALUES (2, 3);

3. Configure Spring Boot

application.properties:
spring.datasource.url=jdbc:sap://localhost:39015/?databaseName=HXE
spring.datasource.username=SYSTEM
spring.datasource.password=YourPassword
spring.datasource.driver-class-name=com.sap.db.jdbc.Driver

4. Write Repository

You can run graph queries using JDBC template:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public class GraphRepository {
    private final JdbcTemplate jdbc;

    public GraphRepository(JdbcTemplate jdbc) {
        this.jdbc = jdbc;
    }

    public List<String> getFriends(String person) {
        String sql = """
            SELECT P2.NAME
            FROM GRAPH_WORKSPACE SOCIAL_GRAPH
            MATCH (P1)-[:FRIENDSHIP]->(P2)
            WHERE P1.NAME = ?
            """;
        return jdbc.queryForList(sql, String.class, person);
    }
}

5. Expose via REST

import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/graph")
public class GraphController {
    private final GraphRepository repo;

    public GraphController(GraphRepository repo) {
        this.repo = repo;
    }

    @GetMapping("/friends/{name}")
    public List<String> getFriends(@PathVariable String name) {
        return repo.getFriends(name);
    }
}
Call:
GET /graph/friends/Alice
Result: [ "Bob" ]

image quote pre code