Programatically querying dataManager makes results [detached]

System.out.println(dataManager.load(Webcams.class).all().fetchPlan(FetchPlan.BASE).list());

Doing this results in the following:
[com.project.project.entity.Webcams-d3b494db-ff85-13ae-6d5c-fe4b369f0663 [detached], com.project.project.entity.Webcams-fdde84d9-3792-bc9c-f867-c1fc787b0f6d [detached]]

Using an entity browser on the screen, however, displays the results properly.

I tried to use kvEntities instead with the following:

        List<KeyValueEntity> kvEntities = dataManager.loadValues(
                        "select o.screenName, o.clientName from sysc_Webcams o")
                .store("main")
                .properties("screenName", "clientName")
                .list();
        System.out.println(kvEntities);

        StringBuilder sb = new StringBuilder();
        for (KeyValueEntity kvEntity : kvEntities) {
            Webcams webcams = kvEntity.getValue("screenName");
            Clients clients = kvEntity.getValue("clientName");
            sb.append(webcams.getScreenName()).append(" : ").append(clients.getClientName()).append("\n");
        }
        System.out.println(sb.toString());

However, I get an error:

ClassCastException: class java.lang.String cannot be cast to class com.project.project.entity.Webcams (java.lang.String is in module java.base of loader ‘bootstrap’; com.project.project.entity.Webcams is in unnamed module of loader ‘app’)

Fixed. I changed the StringBuilder to the following:

        StringBuilder sb = new StringBuilder();
        System.out.println("Built SB...");
        for (KeyValueEntity kvEntity : kvEntities) {
            String webcams = kvEntity.getValue("screenName");
            Clients clients = kvEntity.getValue("clientName");
            sb.append(webcams).append(" : ").append(clients.getClientName()).append("\n");
        }

Another more typesafe way of doing the same:

String text = dataManager.load(Webcams.class)
        .all()
        .list()
        .stream()
        .map(entity -> entity.getScreenName() + " : " + entity.getClientName())
        .collect(Collectors.joining("\n"));
1 Like