Hibernate получает идентификатор из результата createCriteria () - PullRequest
2 голосов
/ 28 мая 2009

У меня есть метод, который берет список сущностей (Class es) и выполняет некоторые вычисления. Чтобы описать мои потребности, приведу простейшую схему метода (псевдокод):

public void do(List<Class<?> entities) {
    for (Class<?> entity : entities) {
        List<?> list = session.createCriteria(entity).list();
        for (Object o : list) {
            System.out.println(o.getClass().getSimpleName() + " " + o.getId());
        }
    }
}

Есть ли способ получить / получить идентификатор o?

Ответы [ 3 ]

6 голосов
/ 28 мая 2009
session.getIdentifier(o)
1 голос
/ 28 мая 2009

Ну, может быть, он получит много критики, но все ваши классы сущностей могут реализовать этот интерфейс:

public interface EntityWithId {
    Integer getId();
    void setId(Integer id);
}

Если ваши идентификаторы не являются целыми числами, возможно, интерфейс может быть:

public interface EntityWithId<T> {
    T getId();
    setId(T id);
}

public class Entity implements EntityWithId<String> {
    private String id;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    .
    .
    .
}

Во всяком случае, я не понимаю, почему вы хотите получить идентификаторы всех ваших сущностей, это странное решение для странного требования, хе-хе.

0 голосов
/ 28 мая 2009

Нет, если у вас нет свойства с одинаковым именем для всех сущностей, вы можете использовать рефлексию для вызова метода получения этого свойства. Если все они названы как-то по-другому, то вы получите NoSuchMethodException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...