Hibernate - NullPointerExceptions ao tentar dar retrieve

2 respostas
V

Bem pessoal, no meu modelo de dados nos temos duas entidades: O perfil e o usuário.
1 usuário pode ter vários perfis.
1 usuário tambem pode ter um “perfil ativo”, que é o perfil que ele está usando atualmente.

O problema é: depois que eu mapeei o perfil ativo (activeProfile) no user.hbm.xml (usando many-to-one) eu comecei a ter NullPointerExceptions quando eu tento acessar usuários que tem perfil ativo setado. Esse erro magicamente nao acontece quando eu tento acessar usuários que nao tem perfil ativo (o seu PROFILE_ID é null).
Para inserir ou dar update nenhum desses erros acontecem.

Alguem aqui PELAMORDEDEUS sabe como eu conserto isso?

As tabelas e as classes que estou usando sao:

Table USER:

USER_ID: VARCHAR(10)
NAME: VARCHAR(20)
EMAIL: VARCHAR(20)
SERIAL_NUMBER:VARCHAR(20)
PROFILE_ID: INTEGER (this is the foreign key that references the active profile)

Table PROFILE:

PROFILE_ID: INTEGER
NAME: VARCHAR_20
USER_ID: VARCHAR(10) (This is the Foreign Key that indicutes whose profile is this).

My Classes:

public class User {

private String userID;

private String name;

private String email;

private String serialNumber;

private List profiles;

private Profile activeProfile;

//getters, setters, etc…

}

public class Profile {

private int profileID;

private String name;

//getters, setters, etc…
}

Can anyone here please help me?

Meus arquivos .hbm.xml:

<class name=User"
table=“USER” >

A Stacktrace da excepion:

Exception in thread main java.lang.NullPointerException

at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)

at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)

at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)

at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)

at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)

at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)

at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)

at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)

at org.hibernate.type.EntityType.resolve(EntityType.java:303)

at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)

at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)

at org.hibernate.loader.Loader.doQuery(Loader.java:717)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)

at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)

at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:47)

at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:41)

at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2730)

at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:365)

at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:346)

at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:123)

at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:177)

at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)

at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)

at org.hibernate.impl.SessionImpl.get(SessionImpl.java:799)

at org.hibernate.impl.SessionImpl.get(SessionImpl.java:792)

at com.ibm.extremeblue.callhandling.persistence.UserDAO.loadUser(UserDAO.java:19)

at com.ibm.extremeblue.callhandling.persistence.UserDAO.main(UserDAO.java:41)

2 Respostas

V

Bem galera, acabei de resolver o problema da maneira mais absurda possível. Nao entendi ao certo pq mas o que eu fiz foi o seguinte:

<many-to-one name=“activeProfile” not-found="ignore"
class="com.ibm.extremeblue.callhandling.entities.Profile"
column=“PROFILE_ID” insert=“true” update=“true”/>

Acrescentei a opcao acima na tag! A partir disso passou a funcionar tranquilo. Consegui dar update, retrieve, insert, etc, etc em qualquer tipo de usuário. Com ou sem perfil ativo.
Nao entendi pq. Apesar de ter resolvido meu problema, se alguem me explicar eu ficaria grato!

Abraços!

airton.asg

[b][color=blue]Depois de mais de um ano de seu post… estou eu aqui pesquisando e tendo o mesmo problema…
Vicente Alencar… você não imagina o quanto me foi util sua solução… amanha dia 17-03-08, tenho uma apresentação de um software que estou desenvolvendo para uma indústria de roupas… porém estava apenas rodando no eclipse… Mas quando decidi criar um Jar executavel para criar uma instalação para meu sistema… Bummmm… me deparei com esta bomba… procurei por diversos forúns, nacionais e internacionais… mas encontrei aqui… e com sua ajuda…

Este é um agradecimento… e um incentivo a todos compartilhar suas dúvidas e soluções…
Assim todos nós podemos aprender e crescer…
Muito obrigado…[/color][/b]

Criado 23 de fevereiro de 2007
Ultima resposta 26 de mar. de 2008
Respostas 2
Participantes 2