exceção de hibernação O valor nulo foi atribuído a uma propriedade do setter de tipo primitivo

MJB:

Tendo um problema frustrante com o Hibernate 3.6.9. MS SQL Server 2008. Observe a exceção e a referência de índice de coluna ímpar.

A própria consulta HQL:

Select r from DataStoreReference r join fetch r.container c where r.hash=:hash and r.state=0

O rastreamento de pilha:

2012-05-16 00:01:22,184 [BackgroundDeletionThread] ERROR org.hibernate.util.JDBCExceptionReporter - The value supplied cannot be converted to BIGINT.  
2012-05-16 00:01:22,186 [BackgroundDeletionThread] ERROR org.hibernate.util.JDBCExceptionReporter - The value supplied cannot be converted to BIGINT.  
2012-05-16 00:01:22,188 [BackgroundDeletionThread] ERROR org.hibernate.util.JDBCExceptionReporter - Invalid column index 14.  
2012-05-16 00:01:22,190 [BackgroundDeletionThread] ERROR org.hibernate.util.JDBCExceptionReporter - The value supplied cannot be converted to BIGINT.  
2012-05-16 00:01:22,193 [BackgroundDeletionThread] ERROR org.hibernate.util.JDBCExceptionReporter - The value supplied cannot be converted to BIGINT.  
2012-05-16 00:01:22,194 [BackgroundDeletionThread] ERROR org.hibernate.util.JDBCExceptionReporter - Invalid column index 14.  
2012-05-16 00:01:22,194 [BackgroundDeletionThread] ERROR com.flipper.utils.ServerErrorHandlerStrategy - reportError: Db :: com.flipper.datastore.workers.BackgroundDeletionThread.executeWork:87 :: EXCEPTION : com.flipper.datastore.exceptions.DBStoreException: Null value was assigned to a property of primitive type setter of com.flipper.datastore.model.DataStoreReference.usage com.flipper.datastore.exceptions.DBStoreException: Null value was assigned to a property of primitive type setter of com.flipper.datastore.model.DataStoreReference.usage  
    at com.flipper.datastore.impl.hib.HibernateDBStore.getAllReferences(HibernateDBStore.java:301)
    at    com.flipper.datastore.workers.BackgroundDeletionThread.processEntry(BackgroundDeletionThread.java:165)
    at com.flipper.datastore.workers.BackgroundDeletionThread.processSet(BackgroundDeletionThread.java:138)
    at com.flipper.datastore.workers.BackgroundDeletionThread.executeWork(BackgroundDeletionThread.java:84)
    at com.flipper.datastore.workers.BackgroundDeletionThread.run(BackgroundDeletionThread.java:60)
Caused by: org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.flipper.datastore.model.DataStoreReference.usage
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:109)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:583)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:229)
    at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3847)
    at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:152)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:982)
    at org.hibernate.loader.Loader.doQuery(Loader.java:857)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
    at org.hibernate.loader.Loader.doList(Loader.java:2542)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
    at org.hibernate.loader.Loader.list(Loader.java:2271)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:459)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:365)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at com.flipper.message.dao.DataStoreDao.getAllReferencesByHash(DataStoreDao.java:136)
    at com.flipper.datastore.impl.hib.HibernateDBStore.getAllReferences(HibernateDBStore.java:298)
    ... 4 more
Caused by: java.lang.IllegalArgumentException
    at sun.reflect.GeneratedMethodAccessor556.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:66)
    ... 21 more

Agora, eu entenderia isso da lógica (e do googling) se o seguinte não fosse verdade

a) cada instanciação de DataStoreReference é logo seguida por um setUsage de System.currentTimeMillis) b) o item é marcado como não nulo no mapeamento (veja abaixo) c) a tabela exportada mostra nulos apenas na coluna f_external. A coluna de uso tem números longos perfeitamente razoáveis.

O POJO:

DataStoreReference

private long id;


private String hash;    
private long date;  
private long sze;   
private long usage; 

private int state;  
private String external;
private DataStoreContainer container; 

seguido por getter / setters genéricos não modificados.

O arquivo de mapeamento:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.flippr.datastore.model">
  <class name="DataStoreReference" table="t_dsref">
    <id name="id">
      <column name="ds_reference_id"/>
      <generator class="native"/>
    </id>
    <property name="hash" not-null="true" column="f_hash" lazy="false" index="idx_hash_dsr" type="string" length="128" />
    <property name="state" not-null="true" column="f_state" lazy="false" index="idx_hash_dsr,idx_size_dsr,idx_usage_dsr" type="integer"/>
    <!--  hibernate hates the name size -->
    <property name="sze" not-null="true" column="f_size" lazy="false" index="idx_size_dsr" type="long"/>
    <property name="date" not-null="true" column="f_date" lazy="false" type="long"/>    
    <property name="usage" not-null="true" column="f_usage" lazy="false" index="idx_usage_dsr" type="long"/>
    <property name="external" not-null="false" column="f_ext" lazy="false" type="string" length="160" />

    <many-to-one name="container" class="com.flipper.datastore.model.DataStoreContainer" 
     column="entity_id" foreign-key="fk_ds_container_id_dsr"  not-found="ignore" not-null="true"/>
   </class>
</hibernate-mapping>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.flipper.datastore.model">
  <class name="DataStoreContainer" table="t_dscnt">
    <id name="id">
      <column name="ds_container_id"/>
      <generator class="native"/>
    </id>
    <property name="containerType" column="f_type" index="idx_containerType_dsc" lazy="false" type="integer"/>
    <property name="fileCount" column="f_fc" lazy="false" type="long"/>
    <property name="deletedCount" column="f_dc" lazy="false" type="long"/>
    <property name="path" column="f_path" length="255" lazy="false"  type="string"/>
    <set cascade="save-update,delete,delete-orphan,all-delete-orphan" inverse="true" name="documents">
      <key column="entity_id" />
      <one-to-many class="com.flipper.datastore.model.DataStoreReference"/>
    </set>
  </class>
</hibernate-mapping>
MJB:

Acontece que é um bug com os dialetos aprimorados do Hibernate 3.6 MS SQL. Se você estender os dialetos SQLServer2005 ou SQLServer2008, terá esse problema. Usando o dialeto SQLServer mais antigo (que é praticamente o mesmo que acompanha o Hibernate 3.3x), você não. Provavelmente algo a ver com o suporte de paginação introduzido. Suspiro

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Evite "exceção do Hibernate Valor nulo atribuído a uma propriedade do setter de tipo primitivo" sem wrappers

Um valor nulo não pode ser atribuído a um erro de tipo primitivo (Spring / Hibernate)

Transformação Babel React: tipo de string esperado do valor da propriedade, mas foi nulo

Existe uma maneira de obter o tipo declarado de uma propriedade em vez do tipo do valor atribuído no texto digitado

Erro de: Um valor do tipo 'Futuro' não pode ser atribuído a uma variável do tipo 'SocketIO'

Erro de: Um valor do tipo 'Futuro' não pode ser atribuído a uma variável do tipo 'SocketIO'

Exceção durante o mapeamento da propriedade no caminho da propriedade "": a propriedade não foi encontrada no objeto de destino do tipo "In2code \ Femanager \ Domain \ Model \ User"

como as pessoas lidam com a iteração de uma propriedade do tipo de valor de estrutura Swift?

Texto tipográfico: o tipo 'nulo' não pode ser atribuído ao erro de tipo

O tipo de argumento 'double?' não pode ser atribuído ao tipo de parâmetro 'num', mesmo se eu verificar se o valor não é nulo

Uma matriz multidimensional do tipo primitivo é convertida para o tipo de objeto em Java?

XmlSerializer: o tipo do objeto de argumento não é primitivo

Exceção de mapeamento de hibernação - Não foi possível determinar o tipo para:

Um tipo de valor 'List<Object?> não pode ser atribuído a uma variável do tipo 'List<Looking Gender>

O código do setter não é atingido se eu inserir uma string como um valor de uma propriedade inteira

Retornar "nulo" na função de tipo de retorno primitivo?

erro: o valor de retorno transfere a propriedade, mas o tipo de retorno do método não foi declarado para transferir a propriedade

Especificando o tipo primitivo de uma propriedade em uma cláusula Cypher CREATE

Verifique se uma propriedade int tem um valor atribuído a ela vindo de uma solicitação HTTP

Tipo de string esperado do valor da propriedade, mas foi nulo

Mapeando a coluna JSON do MySQL para o tipo de valor de hibernação

Um valor do tipo 'Nulo' não pode ser atribuído a um parâmetro do tipo 'String' em um construtor de const

Inferindo o tipo de objeto do valor da propriedade no Typescript

O tipo de proteção de tipo não funciona quando atribuído a uma variável?

O tipo de proteção de tipo não funciona quando atribuído a uma variável?

diferença na atribuição de valor a uma propriedade do protótipo diretamente vs .extend

exceção na execução do aplicativo de hibernação

O valor nulo do conjunto de registros não foi detectado na verificação de nulos

O valor atribuído ao primitivo será perdido

TOP lista

quentelabel

Arquivo