Caros colegas,
Estou usando o JPA em meu projeto e utilizei a seguinte propriedade no arquivo persistence.xml
<property name="hibernate.hbm2ddl.auto" value="update"/>
Ao modificar uma das classes de meu projeto, através da adição do atributo int idade, percebi que a coluna correspondente foi alterada corretamente. Por utilizar a estratégia update, os dados antigos foram preservados e o conteúdo da coluna idade foi “setada” como null para cada um dos registros já existentes.
Ao executar a minha aplicação, o novo objeto consegue ser inserido de forma correta, porém uma exceção é lançada ao recuperar os dados da tabela (através do método getResultList()) devida a existência do valor null em um campo que deve ser do tipo integer (Eu uso o MySQL).
Segue a exceção
Caused by: org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of entities.Usuario.idade
at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:106)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:360)
at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:221)
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3594)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:152)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)
at org.hibernate.loader.Loader.doQuery(Loader.java:752)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
... 74 more
Caused by: java.lang.IllegalArgumentException: Can not set int field entities.Usuario.idade to null value
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.set(Unknown Source)
at java.lang.reflect.Field.set(Unknown Source)
at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:102)
... 90 more
A minha dúvida é, se neste caso, a configuração de valor default para um campo que não tenha sido preenchido resolveria o problema. Caso positivo, qual anotação utilizar? (É que eu ainda estou aprendendo a utilizar o JPA)
Obrigado!