Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91

    [hibernate] problema @NotNull

    ciao : voglio utilizzare l annotazione @notnull (o nullable = false) per specificare che certe colonne della tabella non possono accettare valori nulli:
    quando creo la sessione però ottengo il seguente errore :

    org.hibernate.PropertyValueException: not-null property references a null or transient value:



    qualcuno sa perchè?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Java ha un forum dedicato.
    Sposto.

    Tu, nel frattempo, posta il codice: l'eccezione dice che stai usando l'annotazione @NotNull su un campo che già contiene valori nulli o che è addirittura marcato transient (che, quindi, non viene incluso nella persistenza).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Java ha un forum dedicato.
    Sposto.

    Tu, nel frattempo, posta il codice: l'eccezione dice che stai usando l'annotazione @NotNull su un campo che già contiene valori nulli o che è addirittura marcato transient (che, quindi, non viene incluso nella persistenza).


    Ciao.

    ciao grazie della risposta ,ma non capisco :
    immaginiamo di creare una tabella con
    codice:
    CREATE TABLE xxx (
    key int not null primary key,
    hhh varchar(10) not null
    )
    hhh deve essere not null ;
    io con hibernate ho fatto

    codice:
    @NotNull
    private String hhh ;
    perchè credevo di avere lo stesso effetto ; tuttavia quando apro Session mi lancia la suddetta eccezione!

    non capisco : @NotNull dovrebbe solo controllare che se immetto tuple nella tabella hhh non sia null no??

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Come ho scritto, posta il codice dell'Entity... probabile che vi sia un altro errore: l'eccezione dice che potresti aver dichiarato quel campo come transient. Ma se non posti tutto il codice, difficilmente ti potremo aiutare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Come ho scritto, posta il codice dell'Entity... probabile che vi sia un altro errore: l'eccezione dice che potresti aver dichiarato quel campo come transient. Ma se non posti tutto il codice, difficilmente ti potremo aiutare.


    Ciao.

    codice:
    package hibernate;
    
    
    import java.util.List;
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.Table;
    
    
    import org.hibernate.validator.NotNull;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    @Entity
    @Table(name = "Artista")
    public class Artista {
        
        public  Artista (){
            
        }
        
        
        
        private long id ;
        
        
        private String nome ;
        
        
        private String cognome;
        
    
    
        private String luogoDiNascita;
        
        
        private int annoDiNascita ;
        
        
        private  String note ;
        
        
    
    
        private List <MaterialeMultimedialeFilm> films ; // inteso film , telefilm
    
    
        private List <MaterialeTestuale> testi ; // inteso libri pdf ect
    
    
        
    //======METODI GETTER SETTER=======================
    
    
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        public long getId (){
            return id ;
        }
    
    
        public void setId (long id){
            this.id= id ;
        }
        
        @Column(name = "nome" ,nullable = false)
        public String getNome(){
            return nome ;
        }
    
    
        public void setNome (String nome){
            this.nome=nome;
        }
        
        @NotNull
        @Column(name = "cognome")
        public String getCognome(){
            return cognome;
        }
    
    
        public void setCognome (String cognome){
            this.cognome=cognome;
        }
    
    
        @Column(name = "luogoDiNascita" ,nullable = true)
        public String getLuogoDiNascita(){
            return luogoDiNascita;
        }
    
    
        public void setLuogoDiNascita (String luogoDiNascita){
            this.luogoDiNascita=luogoDiNascita;
        }
        
        @Column(name = "note" ,nullable =  true)
        public String getNote (){
            return note ;
        }
    
    
        public void setNote (String note){
            this.note=note;
        }
        
        @Column(name = "annoDiNascita" ,nullable = true)
        public int getAnnoDiNascita (){
            return annoDiNascita ;
        }
    
    
        public void setAnnoDiNascita (int annoDiNascita){
            this.annoDiNascita= annoDiNascita;
        }
        
        
        @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
        @JoinTable(name = "film_attori", joinColumns = { 
                @JoinColumn(name = "attoreId", referencedColumnName ="id") }, 
                inverseJoinColumns = { @JoinColumn(name = "filmId", 
                referencedColumnName ="id") })
        public List <MaterialeMultimedialeFilm> getFilms (){
            return films;
        }
        
        public void setFilms(List <MaterialeMultimedialeFilm> films){
            this.films=films;
        }
        
        
        
        @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
        @JoinTable(name = "testi_autori", joinColumns = { 
                @JoinColumn(name = "autoreId", referencedColumnName ="id") }, 
                inverseJoinColumns = { @JoinColumn(name = "testoId", 
                referencedColumnName ="id") })
        public List <MaterialeTestuale> getTesti (){
            return testi;
        }
        
        public void setTesti (List <MaterialeTestuale> testi){
            this.testi=testi;
        }
    
    
    }

    ciao questo è il codice. Nessun campo è transient
    ho provato sia con @NotNull che con nullable=false

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Puoi postare tutto lo stackTrace dell'eccezione? E magari anche le altre due Entity, visto che sono legate da vincolo di integrità referenziale...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    ciao ecco
    codice:
    Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: hibernate.Artista.cognome
    	at org.hibernate.engine.Nullability.checkNullability(Nullability.java:100)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:312)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
    	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
    	at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
    	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
    	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
    	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
    	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
    	at test.test.main(test.java:52)

    e le altre entita coinvolte
    codice:
    package hibernate;
    
    
    import java.util.List;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.ManyToMany;
    import javax.persistence.Table;
    
    
    
    
    
    
    @Entity
    @Table(name = "materialeMultimedialeFilm")
    public class MaterialeMultimedialeFilm {
    	
    	public  MaterialeMultimedialeFilm () {
    		
    	}
    
    
    	//mysql non supporta il sequencegenerator
    
    
    	private long id ;
    	
    	private String titolo ;
    	
    
    
    	private  String regista ;
    	
    	
    	private List <Artista> attori ; // inteso come scrittori-autori
    	
    	
    	
    
    
    	private  int annoDiPubblicazione ;
    	
    	
    	private  int durata ;  // in min
    	
    	
    	private String formato ; // dvd,dvix,mpg
    	
    	
    	private  int valutazione ;
    	
    
    
    	private String genere ;
    	
    	
    	private String doveSiTrova ;
    	
    	private  String note ;
    	
    //======METODI GETTER SETTER=======================
    	
    	@Column(name = "valutazione" ,nullable = true)
    	public int getValutazione (){
    		return valutazione ;
    	}
    
    
    	public void setValutazione (int valutazione){
    		this.valutazione= valutazione ;
    	}
    	
    	@Column(name = "note" ,nullable = true)
    	public String getNote (){
    		return note ;
    	}
    
    
    	public void setNote (String note){
    		this.note=note;
    	}
    	
    	
    	@Column(name = "formato" ,nullable = false)
    	public String getFormato (){
    		return formato ;
    	}
    
    
    	public void setFormato (String formato){
    		this.formato=formato;
    	}
    	
    	
    	@Column(name = "doveSiTrova" ,nullable = false)
    	public String getDoveSiTrova (){
    		return doveSiTrova ;
    	}
    
    
    	public void setDoveSiTrova (String doveSiTrova){
    		this.doveSiTrova=doveSiTrova;
    	}
    	
    	@Column(name = "annoDiPubblicazione" ,nullable = false)
    	public int getAnnoDiPubblicazione (){
    		return annoDiPubblicazione ;
    	}
    
    
    	public void setAnnoDiPubblicazione (int annoDiPubblicazione){
    		this.annoDiPubblicazione= annoDiPubblicazione ;
    	}
    	
    	
    	@Column(name = "durata" ,nullable = false)
    	public int getDurata (){
    		return durata ;
    	}
    
    
    	public void setDurata (int durata){
    		this.durata=durata ;
    	}
    	
    
    
    	@Column(name = "titolo" ,nullable = false)
    	public String getTitolo (){
    		return titolo ;
    	}
    
    
    	public void setTitolo (String titolo){
    		this.titolo=titolo;
    	}
    	
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	public long getId (){
    		return id ;
    	}
    
    
    	public void setId (long id){
    		this.id= id ;
    	}
    
    
    
    
    	@Column(name = "regista" ,nullable = true)
    	public String getRegista (){
    		return regista ;
    	}
    
    
    	public void setRegista (String regista){
    		this.regista=regista;
    	}
    	
    
    
    	@Column(name = "genere" ,nullable = false)
    	public String getGenere (){
    		return genere;
    	}
    
    
    	public void setGenere (String genere){
    		this.genere=genere;
    	}
    	
    	
    	@ManyToMany(fetch = FetchType.LAZY)
    	public List <Artista> getAttori (){
    		return attori;
    	}
    
    
    	public void setAttori (List <Artista> attori ){
    		this.attori=attori;
    	}
    
    
    }

    codice:
    package hibernate;
    
    
    import java.util.List;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.ManyToMany;
    import javax.persistence.Table;
    import javax.persistence.UniqueConstraint;
    
    
    @Entity
    @Table(name = "materialeTestuale",  
            uniqueConstraints = 
            {
    		@UniqueConstraint(columnNames = {"titolo" , "annoDiPubblicazione"} ) } )
    
    
    
    
    public class MaterialeTestuale {
    	
    public  MaterialeTestuale (){
    	
    }
    
    
    //mysql non supporta il sequencegenerator
    
    
    private long id ;
    
    
    
    
    private String titolo ;
    
    
    
    
    private String genere ;
    
    
    
    
    private  int valutazione ;
    
    
    
    
    private int numeroPagine ;
    
    
    
    
    
    
    private String doveSiTrova ;
    
    
    
    
    private int annoDiPubblicazione;
    
    
    
    
    
    
    
    
    private String casaEditrice;
    
    
    
    
    
    
    private List <Artista> artisti ; // inteso come scrittori-autori
    
    
    
    
    
    
    private String formato ; // pdf ,carta,ect
    
    
    
    
    
    
    private  String note ;
    
    
    //======METODI GETTER SETTER=======================
    
    
    
    
    @Column(name = "titolo" ,nullable = false)
    public String getTitolo (){
    	return titolo ;
    }
    
    
    public void setTitolo (String titolo){
    	this.titolo=titolo;
    }
    
    
    
    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public long getId (){
    	return id ;
    }
    
    
    public void setId (long id){
    	this.id= id ;
    }
    
    
    
    
    @Column(name = "note" ,nullable = true)
    public String getNote (){
    	return note ;
    }
    
    
    public void setNote (String note){
    	this.note=note;
    }
    
    
    
    
    
    
    @Column(name = "valutazione" ,nullable = true)
    public int getValutazione (){
    	return valutazione ;
    }
    
    
    public void setValutazione (int valutazione){
    	this.valutazione= valutazione ;
    }
    
    
    
    
    
    
    @Column(name = "numeroPagine" ,nullable = false)
    public int getNumeroPagine (){
    	return numeroPagine ;
    }
    
    
    public void setNumeroPagine (int numeroPagine){
    	this.numeroPagine= numeroPagine ;
    }
    
    
    
    
    @Column(name = "annoDiPubblicazione" ,nullable = false)
    public int getAnnoDiPubblicazione (){
    	return annoDiPubblicazione ;
    }
    
    
    public void setAnnoDiPubblicazione (int annoDiPubblicazione){
    	this.annoDiPubblicazione= annoDiPubblicazione ;
    }
    
    
    
    
    @Column(name = "casaEditrice" ,nullable = true)
    public String getCasaEditrice (){
    	return casaEditrice ;
    }
    
    
    public void setCasaEditrice (String casaEditrice){
    	this.casaEditrice=casaEditrice;
    }
    
    
    
    
    @Column(name = "doveSiTrova" ,nullable = false)
    public String getDoveSiTrova (){
    	return doveSiTrova ;
    }
    
    
    public void setDoveSiTrova (String doveSiTrova){
    	this.doveSiTrova=doveSiTrova;
    }
    
    
    
    
    @Column(name = "formato" ,nullable = false)
    public String getFormato (){
    	return formato ;
    }
    
    
    public void setFormato (String formato){
    	this.formato=formato;
    }
    
    
    
    
    
    
    @Column(name = "genere" ,nullable = false)
    public String getGenere (){
    	return genere;
    }
    
    
    public void setGenere (String genere){
    	this.genere=genere;
    }
    
    
    
    
    
    
    @ManyToMany(fetch = FetchType.LAZY)
    public List <Artista> getArtisti (){
    	return artisti;
    }
    
    
    public void setArtisti (List <Artista> artisti ){
    	this.artisti=artisti;
    }
    
    
    
    
    
    
    
    
    
    
    }

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Ok. Dallo stackTrace completo dell'eccezione si evince che tu, alla riga 52 di test.java, stai cercando di persistere un oggetto di tipo Artista... ma evidentemente non hai specificato il campo Cognome per il quale hai imposto il @NotNull.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Ok. Dallo stackTrace completo dell'eccezione si evince che tu, alla riga 52 di test.java, stai cercando di persistere un oggetto di tipo Artista... ma evidentemente non hai specificato il campo Cognome per il quale hai imposto il @NotNull.


    Ciao.
    ciao grazie , ma non capisco : il controllo del campo nullo dovrebbe essere fatto quando eseguo un insert nel db ; io non ho fatto nessuna operazione di persistenza , ho solamente aperto la sessione !

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Purtroppo io non posso sapere cosa avviene nel tuo file test.java alla riga 52...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.