Vous n'êtes pas identifié(e).

#1 05/06/2018 13:23:55

Flow
Membre

Java Framwork Hibernate champs vide.

Bonjour

Je développe une appli en J2EE avec un DB PostgreSQL.

J'utilise pgAdmin4 version3.0, Eclipse Oxygen et Hibernate 3.0.

Depuis mon appli, je rempli une table a partir d'un fichier Excel.

Le fichier Excel contient des champs texte, date et nombre (sachant qu'un champ de nombre sont saisi en string dont un correspond à un boolean).

Mon problème est que j'ai des champs qui sont vide et que au vu de mes essaies, pour les date, les nombres et les boolean, postgres n'accepte pas les champs null et bien sur, le client veut que ces champs reste null (sinon, c'est pas marrant ^^).

Existe t'il un moyen pour faire accepter des champs null pour des date, nombre et boolean en tant que nul dans une base postgre (encore faut-il que je les fasse accepter par le Java) ??


Voici mon code Java si cela peut intéresser quelqu'un:

import java.io.File;
import java.io.FileInputStream;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Iterator;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.opensymphony.xwork2.ActionSupport;

import trigo.Util.HibernateUtil;
import trigo.beans.TestTempLigneExtract;

@SuppressWarnings("serial")
public class OpenWorkBook extends ActionSupport{

	static XSSFRow row;
	Logger log = LogManager.getLogger(OpenWorkBook.class);
	private TestTempLigneExtract tmp = new TestTempLigneExtract();
	
	@Override
	public String execute() throws Exception {
		
		File file = new File("cheminFichierExcel.xlsx");
		FileInputStream fis = new FileInputStream(file);

		
		if(file.isFile() && file.exists()) {
			System.out.println("Fichier Excel ouvert");
		}else {
			System.out.println("Erreur sur l'ouverture du fichier Excel");
		}
		
		XSSFWorkbook wb = new XSSFWorkbook(fis);
		XSSFSheet sheet = wb.getSheetAt(0);
		Iterator<Row> rowIterator = sheet.iterator();
		int i = 0;
		while(rowIterator.hasNext()) {
			Session s = HibernateUtil.getSession();
			Transaction tx = s.beginTransaction();
			row = (XSSFRow)rowIterator.next();
			Iterator<Cell> cellIterator = row.cellIterator();
			tmp = new TestTempLigneExtract();
			i++;
			System.out.println(row.getRowNum());
			while(cellIterator.hasNext()) {
				Cell cell = cellIterator.next();
			
				switch (cell.getColumnIndex()) {
					case 0:
						String avis;
						if(cell.getStringCellValue().isEmpty()) {
							avis = "";
						}else {
							avis = cell.getStringCellValue();
						}
						tmp.setAvis(avis);
						break;
					case 1:
						String art;
						if(cell.getStringCellValue().isEmpty()) {
							art = "";
						}else {
							art = cell.getStringCellValue();
						}
						tmp.setArticle(art);
						break;
					case 2:
						String des;
						if(cell.getStringCellValue().isEmpty()) {
							des = "";
						}else {
							des = cell.getStringCellValue();
						}
						tmp.setDesignationArticle(des);
						break;
					case 3:
						String sn;
						if(cell.getStringCellValue().isEmpty()) {
							sn = "";
						}else {
							sn = cell.getStringCellValue();
						}
						tmp.setSn(sn);
						break;
					case 4:
						String four;
						if(cell.getStringCellValue().isEmpty()) {
							four = "";
						}else {
							four = cell.getStringCellValue();
						}
						tmp.setFournisseur(four);
						break;
					case 5:
						String grp;
						if(cell.getStringCellValue().isEmpty()) {
							grp = "";
						}else {
							grp = cell.getStringCellValue();
						}
						tmp.setGroupeDeCode(grp);
						break;
					case 6:
						String descrip;
						if(cell.getStringCellValue().isEmpty()) {
							descrip = "";
						}else {
							descrip = cell.getStringCellValue();
						}
						tmp.setDescription(descrip);
						break;
					case 7:
						String statut;
						if(cell.getStringCellValue().isEmpty()) {
							statut = "";
						}else {
							statut = cell.getStringCellValue();
						}
						tmp.setStatut(statut);
						break;
					case 8:
						Date jour = null;
						if(cell.getDateCellValue() == null) {
							jour = null;
						}else {
							jour = cell.getDateCellValue();
						}
						tmp.setJourCreation(jour);
						break;
					case 9:
						String heure;
						if(cell.getStringCellValue().isEmpty()) {
							heure = "";
						}else {
							heure = cell.getStringCellValue();
						}
						tmp.setHeureCreation(heure);
						break;
					case 10:
						String gest;
						if(cell.getStringCellValue().isEmpty()) {
							gest = "";
						}else {
							gest = cell.getStringCellValue();
						}
						tmp.setGestionnaire(gest);
						break;
					case 11:
						String value;
						if(cell.getStringCellValue() == null) {
							value = "0.0";
						}else {
							value = cell.getStringCellValue();
						}
						NumberFormat nf = NumberFormat.getInstance();
						double valeur = nf.parse(value.replace(".", "")).doubleValue(); // il y a des . comme separateur des milliers dans L'Excel
						tmp.setValeur(valeur);
						break;
					case 12:
						String devise;
						if(cell.getStringCellValue().isEmpty()) {
							devise = "";
						}else {
							devise = cell.getStringCellValue();
						}
						tmp.setDevise(devise);
						break;
					case 13:
						if (cell.getNumericCellValue() == 0.0){
							tmp.setRic(false);
						}else if (cell.getNumericCellValue() == 1.0) {
							tmp.setRic(true);
						}else {
							tmp.setRic(null);
						}
						break;
					default:
						break;
				} // switch Index
			} // while Cell

			s.save(tmp);
			tx.commit();
			s.clear();
			s.close();
			System.out.println();
		
		} // while Row

		return SUCCESS;
	}
	
}

Dans le mapping Hibernate, j'ai

not-null="false"

mais impossible de le mettre manuellement à NO à NOT NULL dans pgAdmin sur les champs qui m'interessent


Merci d'avance pour votre aide.

Hors ligne

#2 05/06/2018 23:08:10

gleu
Administrateur

Re : Java Framwork Hibernate champs vide.

pour les date, les nombres et les boolean, postgres n'accepte pas les champs null

Faux, il est tout à fait possible d'enregistrer NULL dans un champ date ou integer ou boolean. Il faut bien sûr que la colonne ne soit pas déclarée NOT NULL. Je ne pourrais pas vous aider sur la partie Hibernate ou Java, n'y connaissant rien mais PostgreSQL accepte les NULL quelque soit le type du champ.


Guillaume.

Hors ligne

#3 06/06/2018 08:38:31

Flow
Membre

Re : Java Framwork Hibernate champs vide.

OK. merci beaucoup.
Faut que je vois ça exactement et surtout voir si en Java sa passe.

Hors ligne

Pied de page des forums