Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate


Автор: Tony 8.3.2006, 13:39
Приветик чудики smile !
Есть код: List list=ses.createSQLQuery("select * from events").addEntity(Event.class).list();
No questions.
Но как бить если мне нузно 4тоби обекти били облегчённие.Тоест иницилизировани отделние проперти, но не все.Пробивал по всякому smile smile но вилитает Exception

Автор: tux 8.3.2006, 16:08
Привет, чудик!
Решается все достаточно просто. Нужно определить в классе конструктор с необходимым перечнем параметров и использовать конструктор внутри запроса. Вот пример выполнения запроса:
Код

List files = session
    .find("select new DpoFile(f.id, f.fileName, f.fileSize, "
        + "f.contentType, f.fileDescription, f.fileType) from DpoFile as f where f.folder.id = ?",
        new Object[]{folderId},
        new Type[]{Hibernate.STRING});

А таким образом выглядит конструктор в классе DpoFile:
Код

public class DpoFile implements Serializable, HibernateStoredObject {
    private String id;
    private String fileName;
    private int fileSize;
    private String contentType;
    private byte[] content;
    private DpoFolder folder;
    private FileType fileType;
    private String fileDescription;
    private String fileSummary;
    private Date fileTime;

    public DpoFile(String id, String fileName, int fileSize, String contentType, String fileDescription, FileType fileType) {
        this.id = id;
        this.fileName = fileName;
        this.contentType = contentType;
        this.fileSize = fileSize;
        this.fileDescription = fileDescription;
        this.fileType = fileType;
    }
}

Автор: Tony 8.3.2006, 16:29
Момент.Я исплзую Bean .Я не могу сделать конструктор.

Автор: tux 8.3.2006, 16:59
Цитата(Tony @ 8.3.2006, 21:29 Найти цитируемый пост)
Момент.Я исплзую Bean .Я не могу сделать конструктор.

Ясно. Тогда делаем еще проще smile

Пример из Hibernate Reference Documentation:
Код

String sql = "select cat.originalId as {cat.id}, " +
    "cat.mateid as {cat.mate}, cat.sex as {cat.sex}, " +
    "cat.weight*10 as {cat.weight}, cat.name as {cat.name} " +
    "from cat_log cat where {cat.mate} = :catId"
    
List loggedCats = sess.createSQLQuery(sql)
    .addEntity("cat", Cat.class)
    .setLong("catId", catId)
    .list();

В запросе, естественно, должны быть перечислены только нужные поля таблицы и атрибуты объектов. Конструкции без фигурных скобок задают таблицу.поле, конструкции типа {cat.mate} задают объект.атрибут.

Автор: Tony 8.3.2006, 18:23
Спасибки попробую

Автор: Tony 13.3.2006, 16:50
Не получается.Есть класс Event там property id(String),title,date(Date).Хочу вибрать title i id.Пишу
String sql="select event_id as {event.id}, " +
"title as {event.title} "+
"from events event";

List list=ses.createSQLQuery(sql).addEntity("event",Event.class).list();
log.info(((Event)list.get(0)).getId());
Добавлено @ 16:53
Кстати таблица Events там столбци event_id,title,event_date

Автор: tux 13.3.2006, 18:21
Да, действительно не получается. При получении экземпляра объекта Hibernate пытается получить и отсутствующие в запросе поля таблицы, что вызывает исключение драйвера JDBC. Что же, попробую подумать как его обмануть.

В следующий раз постарайся писать какая возникла ошибка и где, приводить stackTrace и т.п.

Автор: Tony 13.3.2006, 18:36
Ошибка странная

org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:65)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2148)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:111)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1674)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:147)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:164)
at events.EventManager.loadList(EventManager.java:93)
at events.EventManager.<init>(EventManager.java:19)
at events.EventManager.main(EventManager.java:24)
Caused by: java.sql.SQLException: Column 'EVENT2_0_0_' not found.
at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:2806)
at com.mysql.jdbc.ResultSet.getTimestamp(ResultSet.java:2427)
at org.hibernate.type.TimestampType.get(TimestampType.java:30)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:1899)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1372)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1300)
at org.hibernate.loader.Loader.getRow(Loader.java:1197)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:569)
at org.hibernate.loader.Loader.doQuery(Loader.java:689)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
... 9 more

Автор: Tony 17.3.2006, 10:23
Не ужели не кто не знает !!! smile
Без етого не лзя исплзовать Hibernate

Автор: tux 18.3.2006, 07:03
Мдя. Похоже первый способ с конструктором - единственный решающий проблему. Честно говоря не представляю себе ситуацию когда нельзя написать конструктор хотя бы для решения именно этой задачи.

Автор: Tony 20.3.2006, 20:04
mda ......Осталось добавить мы все умрём. smile smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)