Спящие аннотации - PullRequest
       20

Спящие аннотации

0 голосов
/ 02 сентября 2010

Я создал таблицу в MySQL:

'object_label' со столбцами 'id' и 'name'. Я вставил значения в эту таблицу.

В Java я создал новый класс -ObjectLabel:

import javax.persistence.*;

 @Entity
    @Table(name = "object_label")
    public class ObjectLabel  implements Serializable {

        private static final long serialVersionUID = 3475812350796110403L;
        private String name;

        public Long getId() { return id; }

        @Id 
        @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(precision = 10, unique = true, nullable = false, updatable = false)
    public Long getId() {
        return id;
    }

    public void setId( Long id ) {
        this.id = id;
    }

        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }


    }

в hibernate.cfg.xml определено:

<mapping class="com.myCompany.model.ObjectLabel" />

Я хочу получить значение из таблицы, Я определил сервис:

@SuppressWarnings( "unchecked" )
    @Transactional( readOnly = true, propagation = Propagation.SUPPORTS )
    public Collection<T> findAll() {
        Session session = getSessionFactory().getCurrentSession();

        return 
            session.createCriteria( persistentClass 
                    ).setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY
                            ).list();
    }

Я получаю пустой список.

в базе данных 'select * from' object_label '' возвращает значения)

в чем проблема в моем коде?

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

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

List results = session.createCriteria(ObjectLabel.class).list();

Не уверен, почему вы используете Criteria.DISTINCT_ROOT_ENTITY так как вы не делаете никаких проекций.

Чтобы точно видеть, что происходит, я рекомендую активировать ведение журнала операторов SQL (либо используя свойство hibernate.show_sql, как предложено nkr1pt, либо через org.hibernate.SQL категория ведения журнала).Из документации Hibernate:

3.5 Ведение журнала

...

При разработке приложений в Hibernate вы почти всегда должны работать с debug включено для категории org.hibernate.SQL или, альтернативно, свойство hibernate.show_sql включено.

0 голосов
/ 02 сентября 2010

Что такое sql, который генерирует hibernate, вы можете увидеть его в консоли / журнале, если для show_sql в config установлено значение true.

Кроме того, используйте @Entity (name = "...") вместо @Entity @Table (name = "...."), вы смешиваете аннотации JPA с аннотациями Hibernate

...