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 :
É 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.
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.