Gravar Data com Hibernate

Alguém sabe se é possivel gravar a data 00/00/0000 em um banco Oracle utilizando Hibernate? Pois se eu setar objeto como null, o hibernate vai gravar vazio na tabela, e o banco exige que seja gravado 00/00/0000.
Da mesma forma quando eu consulto a data, e o valor é 00/00/0000, o hibernate não traz null, mas traz outro valor bizarro.
Será que existe alguma configuração para ele se achar?
Ps.: Alterar a configuração do banco não é uma opção.

Eu tenho esse projeto aqui que faz uso de gravação de Data com o Hibernate, da uma olhada nele para se basear para você fazer no seu.

{ } ,s .

Daniel a sua entity Reserva.java a qual grava a data das reservas tem o mesmo problema que o meu projeto, ou seja, se na sua base estiver salvo algo como 00/00/0000 ao consultar o hibernate ira devolver algo como 01/01/2813. E não um valor null.

Creio que não seja possível gravar uma data com esse valor, pois é uma data inválida. Creio que só será possível se o tipo da coluna for texto.

E o mesmo problema ao salvar, você não irá conseguir salvar um valor 00/00/0000, pois se setar um valor null na sua variavel dataCadastro:

@Temporal(TemporalType.DATE)
private Calendar dataCadastro;

Na base vai ser gravado um valor vazio, null e não 00/00/0000 que é o que eu preciso.

Eu não testei isso, pois nesse link que passei, o cadastro da data é obrigatório quando coloquei, mas irei testa para ver.
pois ate aonde eu sei o Oracle nao aceita gravar esse tipo de entrada dd/MM/YYY.
pois no minha classe de Controle para esta classe, tive que fazer conversão para o Oracle aceita :

https://github.com/Daniel-Dos/Livraria-XPTO-Sistema-de-Reservas-de-Livros-On-Line/blob/master/src/action/struts/ReservaIncluirAction.java

É possivel inserir sim uma data 00/00/0000 no banco, e na verdade é até bem normal. É só executar o comando abaixo:

UPDATE MINHA_TABELA
SET MEU_CAMPO_DATA = TO_DATE(1,‘J’)

O resultado disso é 00/00/0000, porém não quero e nem posso utilizar SQL NATIVO, preciso utilizar o hibernate para inserir na tabela, sem utilizar sql nativo.

1 curtida

Hmmm. Não sabia dessa.

First: Update Oracle lib for that version+. old libs you can’t update to TO_DATE(1, ‘J’):

  <dependency>
  	<groupId>com.oracle.jdbc</groupId>
  	<artifactId>ojdbc8</artifactId>
  	<version>18.3.0.0</version>
  </dependency>

is possible update ORACLE TO_DATE(1,‘J’) in a @Entity:

Date data = new GregorianCalendar(-4712+1, Calendar.JANUARY, 1).getTime();

If you want you in a @Entity like:

@Convert(converter = Date1JConverter.class)
private Date column;


Add this converter:

@Converter
public class Date1JConverter implements AttributeConverter<Date, Date> {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(Date1JConverter.class);
	private static final int TO_YEAR_1J = -4712+1; 
	private static final String TO_DATE_1J = "01/00/04712";
	
	@Override
	public Date convertToDatabaseColumn(Date dColumnValue) {
		if (dColumnValue == null) {
	    	return new GregorianCalendar(TO_YEAR_1J, Calendar.JANUARY, 1).getTime();
		}
		return dColumnValue;
	}

	@Override
	public Date convertToEntityAttribute(Date dColumnValue) {
		SimpleDateFormat formatNowYear = new SimpleDateFormat("dd/mm/syyyy");
		String sColumnValue = formatNowYear.format(dColumnValue);
		if (sColumnValue.equalsIgnoreCase(TO_DATE_1J)) {
			return null;
		}
		return dColumnValue;
	}
}

if you have some tip contact: mmhinz@gmail.com

A publicação que você respondeu é de Junho/2016, não que isso seja um problema, afinal, toda resposta compartilhada é muito bem vinda, mas atente-se as datas dos tópicos, pois sempre que é incluso um comentário na publicação a mesma vai para o topo e fica entre as publicações recentes.