Arquivos de sites

ArrayIndexOutOfBoundsException ao utilizar NamedParameterJdbcTemplate + MapSqlParameterSource

Fala galera, bora tirar o pó do blog rs…

me deparei com o erro abaixo, nada intuitivo, utilizando NamedParameterJdbcTemplate e MapSqlParameterSource, onde eu tenho na minha query parâmetros opcionais/nullable, ou seja, parâmetros que podem vir ou não com valor (null):

java.lang.ArrayIndexOutOfBoundsException: 128
	at oracle.jdbc.driver.OracleParameterMetaDataParser.computeBasicInfo(OracleParameterMetaDataParser.java:327)
	at oracle.jdbc.driver.OracleParameterMetaDataParser.getParameterMetaDataSql(OracleParameterMetaDataParser.java:433)
	at oracle.jdbc.driver.OracleParameterMetaData.getParameterMetaData(OracleParameterMetaData.java:58)
	at oracle.jdbc.driver.OraclePreparedStatement.getParameterMetaData(OraclePreparedStatement.java:12861)
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.getParameterMetaData(OraclePreparedStatementWrapper.java:1551)
	at org.springframework.jdbc.core.StatementCreatorUtils.setNull(StatementCreatorUtils.java:248)
	at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:229)
	at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:147)
	at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.setValues(PreparedStatementCreatorFactory.java:278)
	at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:236)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:657)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:682)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:736)
	at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:212)
	...

após perder alguns minutos pesquisando, não achei nada para resolver, então criei uma solução/tratamento simples:

public <T> void setOptionalParameter(MapSqlParameterSource parameters, String name, T value) {
   if (valor == null)
      parameters.addValue(name, value, Types.NULL);
   else
      parameters.addValue(name, value);
}

Forma de utilização:

MapSqlParameterSource parameters = new MapSqlParameterSource();
new MapSqlParameterSourceUtil().setOptionalParameter(parameters, "optionalParam", optionalParam);
parameters.addValue("mandatoryParam", mandatoryParam);
jdbcTemplate.query(...);

Espero ter ajudado, see ya! 😀

JPA/Hibernate Static Metamodel Attributes não populados / nulos — Gerando NullPointerException

E ai galera, beleza?

Hoje tive um problema tentando utilizar os atributos metamodel estáticos do JPA/Hibernate,
sempre quando eu ia utilizá-los, eles estavam nulos… depois de um tempo quebrando a cabeça consegui achar o motivo!

Vamos exemplificar o cenário:

Entidade:

package com.mydomain.model.user;

public class User {

/** Número de identificação */
@Id
private Long id;

/** Nome de autenticação */
private String username;

//getters e setters
}

Metamodel:

package com.mydomain.metamodels;

import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;

@StaticMetamodel(User.class)
public class User_ {
public static volatile SingularAttribute<User, String> username;
}

Uso do metamodel no predicado (predicate):


cb.equal(root.get(User_.username), “usuario_teste”);

Toda vez que eu tentava dar get(…) eu estava tomando nullpointerexception,
e a solução que encontrei foi colocar a classe User.class e a User_.class no mesmo pacote…
não sei o real motivo para precisarem estar, porém só assim funcionou pra mim..

Pesquisando descobri também que em futuros releases talvez essas classes possam ficar em pacotes diferentes,
segue algumas regras descritas na especificação do JPA 2:

  • Classes Metamodel devem estar no mesmo pacote das classes de entidade que elas descrevem;
  • Elas devem ter o mesmo nome das classes de entidade que elas descrevem, seguido por um traço-baixo (“_”, underline, underscore…).
    Exemplo: Produto.class é a classe de entidade e o Produto_.class é a classe metamodel.
  • Se uma entidade herdar de outra entidade ou de uma superclasse mapeada (mapped superclass) deve herdar da classe metamodel que descreve sua superclasse.
    Exemplo: Se ProdutoEspecial.class estende Product.class, que estende ObjetoPersistente.class, então ProdutoEspecial_.class deve estender Produto_.class, que deve estender ObjetoPersistente_.class.

É isso ai pessoal espero ter ajudado!
valeu!!!

Fonte: stackoverflow.com – debbie/Vítor E. Silva Souza

Como atribuir valor para o atributo ‘android:drawable …’ via ‘HardCode’

Como atribuir valor para os atributos android:drawableRight, android:drawableLeft e etc via ‘HardCode’???

Apenas use o método:

public void setCompoundDrawables (Drawable left, Drawable top, Drawable right, 
 Drawable bottom)

Deixe null os parâmetros que você não irá utilizar!!! 😀 simples assim…

caso esse primeiro método não resolva, utilize:

public void setCompoundDrawablesWithIntrinsicBounds (Drawable left, Drawable top, Drawable right, 
 Drawable bottom)

Fonte: stackoverflow – eyespyus / stackoverflow – hunterp