Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> could not execute query, hibernate & annotation 
V
    Опции темы
garbuz
Дата 15.7.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Было у меня небольшое hibernate приложение. Маппинг описывался в виде xml-файлов. Все прекрасно работает. Решил заменить xml на аннтотации, ничего пока не выходит. Прошу помощи.

Класс группы.
Код

@Entity
@Table(name = "groups")
public class Group {
    @Id
    @Column(name = "group_id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long groupId;

    @Column(name = "groupName", nullable = false, length = 255)
    private String nameGroup;

    @Column(name = "curator", nullable = false, length = 255)
    private String curator;

    @Column(name = "speciality", nullable = false, length = 255)
    private String speciality;

    private Set subjects = new HashSet();

    @ManyToMany(
            targetEntity = student.logic.Subject.class,
            cascade={CascadeType.PERSIST, CascadeType.MERGE}
    )
    @JoinTable(
            name = "subjectGroup",
            joinColumns = @JoinColumn(name = "group_id"),
            inverseJoinColumns = @JoinColumn(name = "subject_id")
    )
    public Set getSubjects() {
        return subjects;
    }


Класс предмета
Код

@Entity
@Table(name = "subjects")
public class Subject {
    @Id
    @Column(name = "subject_id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long subjectId;

    @Column(name = "subjectName", nullable = false, length = 255)
    private String subjectName;

    @Column(name = "teacher", nullable = false, length = 255)
    private String teacher;

    private Set groups = new HashSet();

    @ManyToMany(
            targetEntity = student.logic.Group.class,
            cascade = {CascadeType.PERSIST, CascadeType.MERGE},
            mappedBy = "subjects"
    )
    public Set getGroups() {
        return groups;
    }


Еще есть класс студент, но там все аналогично, кроме связей м/у таблицами.

Вот что изменил в HibernateUtil.java
Код

sessionFactory = new AnnotationConfiguration()
                    .addPackage("student.logic") 
                    .addAnnotatedClass(student.logic.Group.class)
                    .addAnnotatedClass(student.logic.Student.class)
                    .addAnnotatedClass(student.logic.Subject.class)
                    .configure("hibernate.cfg.xml").buildSessionFactory();


При попытке выполнить запрос, который тянет все группы
Код

  public List<Group> getAllGroups() {
        Session session = null;
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            groups = session.createCriteria(Group.class).list();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка 'getAll'", JOptionPane.OK_OPTION);
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
        return groups;
    }


Вылезает мой JOptionPane с надписью "could not execute query". Вот полный стектрейс
Код

18:32:33,906  INFO Version:15 - Hibernate Annotations 3.2.0.GA
18:32:33,921  INFO Environment:514 - Hibernate 3.2.6
18:32:33,937  INFO Environment:532 - loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=org.hsqldb.jdbcDriver, hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider, hibernate.max_fetch_depth=1, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.jdbc.use_streams_for_binary=true, hibernate.format_sql=true, hibernate.query.substitutions=yes 'Y', no 'N', hibernate.proxool.pool_alias=pool1, hibernate.connection.username=sa, hibernate.cache.region_prefix=hibernate.test, hibernate.connection.url=jdbc:hsqldb:./build/db/hsqldb/hibernate, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.password=****, hibernate.jdbc.batch_versioned_data=true, hibernate.connection.pool_size=1}
18:32:33,937  INFO Environment:563 - using java.io streams to persist binary types
18:32:33,937  INFO Environment:681 - Bytecode provider name : cglib
18:32:33,937  INFO Environment:598 - using JDK 1.4 java.sql.Timestamp handling
18:32:34,015  INFO AnnotationConfiguration:154 - Mapping package student.logic
18:32:34,078  WARN AnnotationBinder:211 - Package not found or wo package-info.java: student.logic
18:32:34,125  INFO Configuration:1432 - configuring from resource: hibernate.cfg.xml
18:32:34,125  INFO Configuration:1409 - Configuration resource: hibernate.cfg.xml
18:32:34,203  INFO Configuration:1547 - Configured SessionFactory: null
18:32:34,218  INFO AnnotationBinder:387 - Binding entity from annotated class: student.logic.Group
18:32:34,265  INFO EntityBinder:340 - Bind entity student.logic.Group on table groups
18:32:34,343  INFO AnnotationBinder:387 - Binding entity from annotated class: student.logic.Student
18:32:34,343  INFO EntityBinder:340 - Bind entity student.logic.Student on table students
18:32:34,343  INFO AnnotationBinder:387 - Binding entity from annotated class: student.logic.Subject
18:32:34,343  INFO EntityBinder:340 - Bind entity student.logic.Subject on table subjects
18:32:34,531  INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for production use!)
18:32:34,531  INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 1
18:32:34,531  INFO DriverManagerConnectionProvider:45 - autocommit mode: false
18:32:34,546  INFO DriverManagerConnectionProvider:80 - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/students
18:32:34,546  INFO DriverManagerConnectionProvider:86 - connection properties: {user=root, password=****}
18:32:34,796  INFO SettingsFactory:89 - RDBMS: MySQL, version: 5.0.45-community-nt
18:32:34,796  INFO SettingsFactory:90 - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.5 ( Revision: ${svn.Revision} )
18:32:34,828  INFO Dialect:152 - Using dialect: org.hibernate.dialect.MySQL5Dialect
18:32:34,828  INFO TransactionFactoryFactory:31 - Using default transaction strategy (direct JDBC transactions)
18:32:34,828  INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
18:32:34,828  INFO SettingsFactory:143 - Automatic flush during beforeCompletion(): disabled
18:32:34,828  INFO SettingsFactory:147 - Automatic session close at end of transaction: disabled
18:32:34,828  INFO SettingsFactory:154 - JDBC batch size: 15
18:32:34,828  INFO SettingsFactory:157 - JDBC batch updates for versioned data: enabled
18:32:34,828  INFO SettingsFactory:162 - Scrollable result sets: enabled
18:32:34,828  INFO SettingsFactory:170 - JDBC3 getGeneratedKeys(): enabled
18:32:34,828  INFO SettingsFactory:178 - Connection release mode: auto
18:32:34,828  INFO SettingsFactory:202 - Maximum outer join fetch depth: 1
18:32:34,828  INFO SettingsFactory:205 - Default batch fetch size: 1
18:32:34,828  INFO SettingsFactory:209 - Generate SQL with comments: disabled
18:32:34,828  INFO SettingsFactory:213 - Order SQL updates by primary key: disabled
18:32:34,828  INFO SettingsFactory:217 - Order SQL inserts for batching: disabled
18:32:34,828  INFO SettingsFactory:386 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
18:32:34,843  INFO ASTQueryTranslatorFactory:24 - Using ASTQueryTranslatorFactory
18:32:34,843  INFO SettingsFactory:225 - Query language substitutions: {yes='Y', no='N'}
18:32:34,843  INFO SettingsFactory:230 - JPA-QL strict compliance: disabled
18:32:34,843  INFO SettingsFactory:235 - Second-level cache: enabled
18:32:34,843  INFO SettingsFactory:239 - Query cache: disabled
18:32:34,843  INFO SettingsFactory:373 - Cache provider: org.hibernate.cache.HashtableCacheProvider
18:32:34,843  INFO SettingsFactory:254 - Optimize cache for minimal puts: disabled
18:32:34,843  INFO SettingsFactory:259 - Cache region prefix: hibernate.test
18:32:34,843  INFO SettingsFactory:263 - Structured second-level cache entries: disabled
18:32:34,843  INFO SettingsFactory:283 - Echoing all SQL to stdout
18:32:34,843  INFO SettingsFactory:290 - Statistics: disabled
18:32:34,843  INFO SettingsFactory:294 - Deleted entity synthetic identifier rollback: disabled
18:32:34,859  INFO SettingsFactory:309 - Default entity-mode: pojo
18:32:34,859  INFO SettingsFactory:313 - Named query checking : enabled
18:32:34,875  INFO SessionFactoryImpl:161 - building session factory
18:32:35,203  INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
Hibernate: 
    select
        this_.groupId as groupId0_0_,
        this_.nameGroup as nameGroup0_0_,
        this_.curator as curator0_0_,
        this_.speciality as speciality0_0_ 
    from
        groups this_
18:32:35,281  WARN JDBCExceptionReporter:77 - SQL Error: 1054, SQLState: 42S22
18:32:35,281 ERROR JDBCExceptionReporter:78 - Unknown column 'this_.groupId' in 'field list'
java.util.NoSuchElementException
    at java.util.AbstractList$Itr.next(AbstractList.java:350)
    at student.web.MainFrameServlet.processRequest(MainFrameServlet.java:155)
    at student.web.MainFrameServlet.doGet(MainFrameServlet.java:189)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)



Еще не совсем понятна ситуация с lazy. Как тут его описывать, в xml вроде все понятно, тут нет. Может ошибка из-за этого и возникает?
И еще вопрос. Почему при описании связей м/у таблицами @JoinTable пишется только у метода одного класса, а у другого mappedBy? Сколько не смотрел примеров, везде так.
 
PM MAIL   Вверх
garbuz
Дата 15.7.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(garbuz @  15.7.2008,  17:40 Найти цитируемый пост)
Еще не совсем понятна ситуация с lazy. Как тут его описывать, в xml вроде все понятно, тут нет. Может ошибка из-за этого и возникает?

C Lazy вроде разобрался.

При перепросмотре кода увидел что @Id стоит как у поля, так и у метода, удалил у метода. Теперь стало вылетать
Код

22:52:19,796  INFO Version:15 - Hibernate Annotations 3.2.0.GA
22:52:19,812  INFO Environment:514 - Hibernate 3.2.6
22:52:19,812  INFO Environment:532 - loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=org.hsqldb.jdbcDriver, hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider, hibernate.max_fetch_depth=1, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.jdbc.use_streams_for_binary=true, hibernate.format_sql=true, hibernate.query.substitutions=yes 'Y', no 'N', hibernate.proxool.pool_alias=pool1, hibernate.connection.username=sa, hibernate.cache.region_prefix=hibernate.test, hibernate.connection.url=jdbc:hsqldb:./build/db/hsqldb/hibernate, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.password=****, hibernate.jdbc.batch_versioned_data=true, hibernate.connection.pool_size=1}
22:52:19,812  INFO Environment:563 - using java.io streams to persist binary types
22:52:19,828  INFO Environment:681 - Bytecode provider name : cglib
22:52:19,828  INFO Environment:598 - using JDK 1.4 java.sql.Timestamp handling
22:52:19,921  INFO AnnotationConfiguration:154 - Mapping package student.logic
22:52:19,968  WARN AnnotationBinder:211 - Package not found or wo package-info.java: student.logic
22:52:20,015  INFO Configuration:1432 - configuring from resource: hibernate.cfg.xml
22:52:20,015  INFO Configuration:1409 - Configuration resource: hibernate.cfg.xml
22:52:20,109  INFO Configuration:1547 - Configured SessionFactory: null
22:52:20,140  INFO AnnotationBinder:387 - Binding entity from annotated class: student.logic.Group
22:52:20,171  INFO EntityBinder:340 - Bind entity student.logic.Group on table groups
22:52:20,234  INFO AnnotationBinder:387 - Binding entity from annotated class: student.logic.Student
22:52:20,234  INFO EntityBinder:340 - Bind entity student.logic.Student on table students
22:52:20,234  INFO AnnotationBinder:387 - Binding entity from annotated class: student.logic.Subject
22:52:20,234  INFO EntityBinder:340 - Bind entity student.logic.Subject on table subjects
Initial SessionFactory creation failed.org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: subjects, for columns: [org.hibernate.mapping.Column(groups)]
15.07.2008 22:52:20 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet MainFrameServlet threw exception
org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: subjects, for columns: [org.hibernate.mapping.Column(groups)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:269)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
    at org.hibernate.mapping.Property.isValid(Property.java:185)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:440)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1108)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1293)
    at Util.HibernateUtil.<clinit>(HibernateUtil.java:18)
    at DAO.GroupsDAO.getAllGroups(GroupsDAO.java:106)
    at DAO.DAOFactory.getAllGroups(DAOFactory.java:75)
    at DAO.DirectoryFacade.getAllGroups(DirectoryFacade.java:37)
    at student.web.MainFrameServlet.processRequest(MainFrameServlet.java:149)
    at student.web.MainFrameServlet.doGet(MainFrameServlet.java:189)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
15.07.2008 22:52:20 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet MainFrameServlet threw exception
java.lang.NoClassDefFoundError: Could not initialize class Util.HibernateUtil
    at DAO.GroupsDAO.getAllGroups(GroupsDAO.java:106)
    at DAO.DAOFactory.getAllGroups(DAOFactory.java:75)
    at DAO.DirectoryFacade.getAllGroups(DirectoryFacade.java:37)
    at student.web.MainFrameServlet.processRequest(MainFrameServlet.java:149)
    at student.web.MainFrameServlet.doGet(MainFrameServlet.java:189)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)


Ключевая фраза как я понимаю
Код

failed.org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: subjects, for columns: [org.hibernate.mapping.Column(groups)]

Естественно в таблице subjects нет поля groups. Как быть? Да, кстати везде дописал fetch = FetchType.EAGER.
PM MAIL   Вверх
garbuz
Дата 17.7.2008, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Разобрался.
PM MAIL   Вверх
speedylight
Дата 18.7.2008, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 7.7.2008

Репутация: нет
Всего: нет



У меня та же самая ошибка Could not determine type for: java.util.Set . Раз разобрался помоги плзsmile
PM MAIL   Вверх
garbuz
Дата 18.7.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Аннотации как писал? У полей? Убери и полей и напиши у методов (getters) и проверь еще раз то место, где связи м\у таблицами. Если что, давай сюда код, будем разбираться smile 
PM MAIL   Вверх
vovs
Дата 4.10.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 22.9.2006
Где: Черкассы

Репутация: нет
Всего: нет



Цитата(garbuz @ 18.7.2008,  11:34)
Аннотации как писал? У полей? Убери и полей и напиши у методов (getters) и проверь еще раз то место, где связи м\у таблицами. Если что, давай сюда код, будем разбираться smile

Нужно переписать абсолютно все аннотации к методам(getters) ?

Или только те аннотации, которые отвечают за связь?


Разобрался. Аннотировать нужно все Гет-методы

Это сообщение отредактировал(а) vovs - 4.10.2010, 15:14
PM MAIL ICQ Skype Jabber   Вверх
Ccoder
Дата 18.3.2012, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.2.2011

Репутация: нет
Всего: нет



Так а что делать то надо? (я тоже застрял)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.