Сопоставить сущность с собственным SQL-запросом - PullRequest
0 голосов
/ 07 сентября 2011

Возможно ли сопоставить собственный запрос SQL (вместо таблицы) с сущностью без аннотаций (с использованием конфигурации XML ) ??

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

Я также знаю, что с аннотациями существует что-то вроде @SqlResultSetMapping, но мне запрещено использовать аннотации.

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Для отображения устаревших таблиц на объект, использующий Hibernate, вы можете использовать метод DAO, подобный следующему:

public List<Audit> getAudits(Integer branchId, Integer locationId, Date fromDate, Date toDate, int first, int count, String sortProperty, boolean ascending) {

    // columns renamed to match sort properties and hibernate mapping
    StringBuilder query = new StringBuilder(
        "SELECT AUD_Number AS number,"
        + " AUD_Number_REL AS relationNumber,"
        + " AUD_Name_REL AS relationName,"
        + " AUD_Date AS date,"
        + " FROM audit WHERE 1");
        if (branchId!= null) {
            query.append(String.format(" AND AUD_Number_BRN = %s", branchId));
        }
        if (locationId!= null) {
            query.append(String.format(" AND AUD_Nummer_LOC = %s", locationId));
        }
        if (fromDate != null) {
            query.append(String.format(" AND AUD_Date >= %s", DateConverter.dateToSql(fromDate)));
        }
        if (toDate != null) {
            query.append(String.format(" AND AUD_Date <= %s", DateConverter.dateToSql(toDate)));
        }
        query.append(String.format(" ORDER BY %s %s", sortProperty, ascending ? "ASC" : "DESC"));
        query.append(String.format(" LIMIT %s, %s", first, count));
        return (List<Audit>) getSession().createSQLQuery(query.toString()).addEntity(Audit.class).list();
}

Тем временем в mappings.hbm.xml:

<class name="Audit">
    <id name="number" type="integer" />
    <property name="relationNumber" type="integer" />
    <property name="relationName" type="string" />
    <property name="date" type="datetime" />
</class>
etc...

Пропуск контекста пружины для краткости.

Помогает ли это?

1 голос
/ 07 сентября 2011

Представление является правильным способом.Если вы хотите каким-то образом сохранить SQL-запрос в базе данных и регулярно ссылаться на его результаты (как если бы это была таблица), то это в точности описание представления.

Так что просто создайте представление иотобразите это.

Если это не решит вашу проблему, пожалуйста, отредактируйте ваш ответ, чтобы объяснить, почему решение с использованием представления нецелесообразно.Может быть, тогда мы сможем вам помочь.

...