Загрузка нескольких аннотированных классов в Hibernate

Я использую спящие аннотации и для этого в hibernate.cfg.xml мне нужно добавить аннотированные классы, как это <mapping class="p.Customer" /> здесь p - имя пакета, а Customer - аннотированный компонент.

Предположим, у меня есть 20 таких аннотированных классов, это означает, что мне нужно написать 20 строк отображения для этого класса. В Spring есть свойство packageToScan это может быть использовано для регистрации / загрузки всех аннотируемых классов гибернации в указанном пакете.

Поскольку я не использую Spring, можем ли мы иметь такую ​​же функциональность в Hibernate?

Также я нашел один тег в hibernate.cfg.xml<mapping package="" /> Сначала я думал, что это сделает работу за меня, но это не сработало. Я не понял, какова польза от этого свойства.

2 ответа

Решение

Волшебство парсинга аннотаций делается при создании фабрики сессий. Hibernate может сделать это без весны. Spring на самом деле просто оборачивает спящий функционал.

Пожалуйста, посмотрите на эту статью: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

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

Вот ссылка, которая может вам помочь. http://code.google.com/p/reflections/

1, см.: Как получить все имена классов в пакете?

2, расширить org.hibernate.cfg.Configuration

`

package com.hw.configuration;

import com.hw.util.ClassFinder;
import org.hibernate.MappingException;
import org.hibernate.cfg.Configuration;

import java.util.List;

/**
 * Created by whuanghkl on 17/5/31.
 */
public class WildCardConfiguration extends Configuration {

    @Override
    public Configuration addPackage(String packageName) throws MappingException {
        List<Class<?>> classes = ClassFinder.find(packageName);
        int size=classes.size();
        for (int i=0;i<size;i++){
            super.addAnnotatedClass(classes.get(i));
        }
        return this;
    }
}

`

3, `

new SchemaExport(new
                 WildCardConfiguration().configure()).create(true, false);

`

Другие вопросы по тегам