Я настроил собственный общий сервис DAO для моего проекта spring/hibernate - идея заключается в том, что я могу легко использовать его у моих контроллеров.Имя класса Spring Generic Dao
Это по существу выглядит следующим образом:
public class DefaultService<T> {
private Class<T> e;
public String className(Class<T> e) {
String clip = e.getName();
clip = clip.substring(clip.lastIndexOf('.') + 1, clip.length());
return clip;
}
public List<T> getAll(Integer status) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("FROM " + className(e) + " WHERE status = " + status);
return query.list();
}
...
который получает ссылаются:
@Autowired
public DefaultService<Address> addressService;
addressService.get(1);
Однако String clip = e.getName()
линия бросает исключения нулевого указателя. Я могу заставить это работать, если переместить класс в секцию атрибутов (так что addressService.get(Address.class, 1)
, но я нахожу это несколько неопрятным, особенно при вызове нескольких разных классов.
Есть ли способ получить класс для генерации значение правильно без повторно добавлять его во все мои функции?
заранее спасибо.
Первая линия моего полного класса @Repository, поэтому я начну называть его, что теперь :) Поскольку это имя класса, которое я хочу, чтобы я мог создавать пользовательские запросы к базам данных и смотреть на ваш код, все, что мне нужно добавить в теорию 'public void e (Class genericType) {this.e = genericType; } '? – Toby
см. Обновление, если файл подкласса пуст, если это необходимо, не подклассы ... onyl-подкласса. в Моем приложении У меня есть несколько репозиториев, которые являются просто экземплярами общего репозитория, а затем один или два репозитория, которые были подклассифицированы (где у них более сложные требования). th esolution, которую я предоставил, позволяет вам подклассы ... Я покажу вам, что aswel – NimChimpsky
Итак, я переделал приложение, чтобы следовать этому (жалко создавая все эти дополнительные репозитории для каждой модели). Один последний вопрос - что делает боб? Кажется, что это нормально, без него, хотя мне нужно было удалить «final» модификатор «tableName» и добавить «public DomainRepository() {}' метод ... – Toby