Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

EntityManager: null pointer exception

02.05.2013, 19:19. Показов 4924. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую spring + jpa (поставщик hibernate).
Раньше у меня был класс где всё было в одном: те он был и сервисом и dao и в нём был EntityManager, который и использовался и всё прекрасно работало, выглядело это так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Service("HTTPContactTypeService")
@Repository
@Transactional
public class ContactTypeServiceImpl implements ContactTypeService {
    private Log log = LogFactory.getLog(ContactTypeServiceImpl.class);
 
    @PersistenceContext
    private EntityManager em;
 
    @Override
    @Transactional(rollbackFor = SaveException.class, propagation = Propagation.REQUIRES_NEW)
    public ContactType save(ContactType info) throws SaveException {
        if(info.getTypeId() == null)
        {
            em.persist(info);
            log.info("Insert new ContactType");
        } else { // Update
            em.merge(info);
            log.info("Update ContactType");
        }
        try{
            em.flush();
            log.info("ContactType saved with id: " + info.getTypeId());
        } catch (Exception e){
            log.info("Exception when try save ContactType data: " + e.getCause().getCause().getMessage());
            throw new SaveException(e.getCause().getCause().getMessage());
        }
        return info;
    }
Захотел разбить на два уровня: сервис уровень который дёргает dao уровень, написал dao класс вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Repository
@Transactional
public class ContactTypeDAO implements IContactTypeDAO{
    @PersistenceContext
    private EntityManager em;
 
    @Override
    @Transactional(rollbackFor = SaveException.class, propagation = Propagation.REQUIRES_NEW)
    public ContactType insert(ContactType info) throws SaveException {
        em.persist(info);
        em.flush();
        return info;
    }
и ... и теперь у меня null pointer exception при persist В общем-то ничего не менялось в конфиге спринга, там осталось по прежнему context:annotation-config:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    <bean id="persistenceUnitManager"
          class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"
          p:persistenceXmlLocation="classpath:META-INF/persistence.xml" />
 
    <bean id="JPAVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
 
 
 
    <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
          p:jpaVendorAdapter-ref ="JPAVendorAdapter"
          p:persistenceUnitManager-ref="persistenceUnitManager"
          p:packagesToScan="com.dw">
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.SybaseDialect</prop>
                <prop key="hibernate.max_fetch_depth">3</prop>
                <prop key="hibernate.jdbc.fetch_size">50</prop>
                <prop key="hibernate.jdbc.batch_size">1</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>
 
 
    <!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
          p:entityManagerFactory-ref="emf">
    </bean>
 
    <!-- Activates various annotations to be detected in bean classes for eg @Autowired -->
    <context:annotation-config/>
 
    <!-- enable the configuration of transactional behavior based on annotations  -->
    <tx:annotation-driven transaction-manager="transactionManager" />
 
    <context:component-scan base-package="com.dw" />
При запуске приложения я вижу что оно находит что надо бы внедрить entity manager и оно таки внедряет его и говорит что всё хорошо:
Code
1
2
3
4
5
6
7
8
9
10
11
02.05.2013 17:37:47 DEBUG (DefaultSingletonBeanRegistry.java:217) - Creating shared instance of singleton bean 'contactTypeDAO'
02.05.2013 17:37:47 DEBUG (AbstractAutowireCapableBeanFactory.java:430) - Creating instance of bean 'contactTypeDAO'
02.05.2013 17:37:47 DEBUG (InjectionMetadata.java:60) - Found injected element on class [com.dw.dao.hiberanteIMPL.ContactTypeDAO]: PersistenceElement for private javax.persistence.EntityManager com.dw.dao.hiberanteIMPL.ContactTypeDAO.em
02.05.2013 17:37:47 DEBUG (AbstractAutowireCapableBeanFactory.java:504) - Eagerly caching bean 'contactTypeDAO' to allow for resolving potential circular references
02.05.2013 17:37:47 DEBUG (InjectionMetadata.java:85) - Processing injected method of bean 'contactTypeDAO': PersistenceElement for private javax.persistence.EntityManager com.dw.dao.hiberanteIMPL.ContactTypeDAO.em
02.05.2013 17:37:47 DEBUG (AbstractBeanFactory.java:245) - Returning cached instance of singleton bean 'emf'
02.05.2013 17:37:47 DEBUG (AbstractBeanFactory.java:245) - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
02.05.2013 17:37:47 DEBUG (AbstractFallbackTransactionAttributeSource.java:106) - Adding transactional method 'find' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
02.05.2013 17:37:47 DEBUG (AbstractAutoProxyCreator.java:537) - Creating implicit proxy for bean 'contactTypeDAO' with 0 common interceptors and 1 specific interceptors
02.05.2013 17:37:47 DEBUG (JdkDynamicAopProxy.java:113) - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [com.dw.dao.hiberanteIMPL.ContactTypeDAO@10417813]
02.05.2013 17:37:47 DEBUG (AbstractAutowireCapableBeanFactory.java:458) - Finished creating instance of bean 'contactTypeDAO'
Но при persist логгер пишет следующее:
Code
1
2
Exception in thread "main" java.lang.NullPointerException
    at com.dw.dao.hiberanteIMPL.ContactTypeDAO.insert(ContactTypeDAO.java:28)
Какая может быть тому причина? Всё прекрасно работало пока оно было "в куче", а только я разбил на два уровня (класса) так сразу и null pointer
Может всему виной мой @Autowired где я хочу чтобы спринг подсунул реализацию моего дао ...

Добавлено через 9 минут
UPD: проблема решена, я при описании сервиса неправильно предписал спрингу внедрять мою реализацию dao и следовательно я использовал не тот dao класс где внедрён entity manager, а каждый раз новый где entity manager не внедрялся.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2013, 19:19
Ответы с готовыми решениями:

@Autowired null pointer exception
При авторизации пользователя, в классе CustomUserDetailsService UserService не инициализируется, бросает NullPointerException В...

Null Pointer Exception
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package user; import...

Помогите с java null pointer exception
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Point { public Double...

2
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
03.05.2013, 01:32
очевидно что проблема в ContactType, но по коду что вы привели нельзя определить где.
предлагаю вам доработать код проверками на null и возвращать осмысленные исключения
это сильно облегчит вам жизнь
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
03.05.2013, 14:24  [ТС]
mutagen, не-не, всё ок, проблема была что сервис использовал новый объект DAO, а не тот куда спринг внедрил entity manager.
А ContactType это entity автоматом сгенерированная + немножко моих правок, с ней точно всё хорошо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2013, 14:24
Помогаю со студенческими работами здесь

Ошибка: Invalid pointer exception
Столкнулся с наипротивнейшим экскепшеном invalid pointer.Функция нормально работает но бяка выползнает.И самое главное что еще и...

Null pointer
void C_StringBit :: setStrBit() { char* ptr1; cout &lt;&lt; &quot;Введите строку&quot;&lt;&lt; endl; cin &gt;&gt; ptr1; lengthBit = strlen(ptr1); ...

Null pointer assignment.
Здравствуйте. Такая проблема: Пытаюсь вызвать функция класса Up() s2 = s1.up(), возвращая указатель на строку (по-умолчанию в s2 пустая...

Invalid null pointer
Так она работает: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;list&gt; #include &lt;string&gt; using namespace std; void...

Null pointer assignment
Помогите найти ошибку, при заполнении массива вручную в конце выдает - Null pointer assignment. И еще вопрос, как сделать чтобы после...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru