Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    17

    problema insert hibernate

    Buongiorno a tutti
    devo salvare con hibernate il seguente oggetto
    codice:
    Session session;
    session = HibernateUtil.getSessionFactory().openSession();
    codice:
    session.beginTransaction();
    Article articolo = new Article("jj", "kk", "kll", new Date(), "kkkk", "klkl", "nmj", "it", new Date());
    Set<Author> autori = new HashSet<Author>();
    autori.add(new Author("a", "b", "c", "d"));
    autori.add(new Author("l", "m", "n", "o"));
    articolo.setAuthors(autori);
    session.save(articolo);
    session.flush();
    session.getTransaction().commit();
    l'oggetto articolo che è una relazione molti a molti (un articolo può avere più autori, e un autore può aver scritto più articoli)
    come posso fare? mi da sempre errore quando salvo l'articolo
    le due classi sotto sono create in automatico quando configuro hibernate. il database dove vengono salvati i dati è mysql

    Grazie a tutti per l'aiuto










    le classi create da hibernate direttamente dal database sono le seguenti





    codice:
    @Entity@Table(name="author"
        ,catalog="pubmedarticleset"
    )
    public class Author  implements java.io.Serializable {
    
    
    
    
         private Integer id;
         private String lastName;
         private String foreName;
         private String initials;
         private String affiliationInfo;
         private Set articles = new HashSet(0);
    
    
        public Author() {
        }
    
    
        
        public Author(String lastName, String foreName, String initials, String affiliationInfo) {
            this.lastName = lastName;
            this.foreName = foreName;
            this.initials = initials;
            this.affiliationInfo = affiliationInfo;
        }
        public Author(String lastName, String foreName, String initials, String affiliationInfo, Set articles) {
           this.lastName = lastName;
           this.foreName = foreName;
           this.initials = initials;
           this.affiliationInfo = affiliationInfo;
           this.articles = articles;
        }
       
         @Id @GeneratedValue(strategy=IDENTITY)
    
    
        
        @Column(name="Id", unique=true, nullable=false)
        public Integer getId() {
            return this.id;
        }
        
        public void setId(Integer id) {
            this.id = id;
        }
    
    
        
        @Column(name="LastName", nullable=false, length=50)
        public String getLastName() {
            return this.lastName;
        }
        
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
    
        
        @Column(name="ForeName", nullable=false, length=50)
        public String getForeName() {
            return this.foreName;
        }
        
        public void setForeName(String foreName) {
            this.foreName = foreName;
        }
    
    
        
        @Column(name="Initials", nullable=false, length=50)
        public String getInitials() {
            return this.initials;
        }
        
        public void setInitials(String initials) {
            this.initials = initials;
        }
    
    
        
        @Column(name="AffiliationInfo", nullable=false, length=50)
        public String getAffiliationInfo() {
            return this.affiliationInfo;
        }
        
        public void setAffiliationInfo(String affiliationInfo) {
            this.affiliationInfo = affiliationInfo;
        }
    
    
    @ManyToMany(fetch=FetchType.LAZY)
        @JoinTable(name="articleauthor", catalog="pubmedarticleset", joinColumns = { 
            @JoinColumn(name="AuthorId", nullable=false, updatable=false) }, inverseJoinColumns = { 
            @JoinColumn(name="ArticleId", nullable=false, updatable=false) })
        public Set getArticles() {
            return this.articles;
        }
        
        public void setArticles(Set articles) {
            this.articles = articles;
        }
    
    
    
    
    
    
    
    
    }

    codice:
    @Entity@Table(name="article"
        ,catalog="pubmedarticleset"
    )
    public class Article  implements java.io.Serializable {
    
    
    
    
         private Integer id;
         private String pubModel;
         private String issn;
         private String citedMedium;
         private Date pubDate;
         private String title;
         private String articleTitle;
         private String abstract_;
         private String language;
         private Date articleDate;
         private Set medlinecitations = new HashSet(0);
         private Set authors = new HashSet(0);
    
    
        public Article() {
        }
    
    
        
        public Article(String pubModel, String issn, String citedMedium, Date pubDate, String title, String articleTitle, String abstract_, String language, Date articleDate) {
            this.pubModel = pubModel;
            this.issn = issn;
            this.citedMedium = citedMedium;
            this.pubDate = pubDate;
            this.title = title;
            this.articleTitle = articleTitle;
            this.abstract_ = abstract_;
            this.language = language;
            this.articleDate = articleDate;
        }
        public Article(String pubModel, String issn, String citedMedium, Date pubDate, String title, String articleTitle, String abstract_, String language, Date articleDate, Set medlinecitations, Set authors) {
           this.pubModel = pubModel;
           this.issn = issn;
           this.citedMedium = citedMedium;
           this.pubDate = pubDate;
           this.title = title;
           this.articleTitle = articleTitle;
           this.abstract_ = abstract_;
           this.language = language;
           this.articleDate = articleDate;
           this.medlinecitations = medlinecitations;
           this.authors = authors;
        }
       
         @Id @GeneratedValue(strategy=IDENTITY)
    
    
        
        @Column(name="Id", unique=true, nullable=false)
        public Integer getId() {
            return this.id;
        }
        
        public void setId(Integer id) {
            this.id = id;
        }
    
    
        
        @Column(name="PubModel", nullable=false, length=50)
        public String getPubModel() {
            return this.pubModel;
        }
        
        public void setPubModel(String pubModel) {
            this.pubModel = pubModel;
        }
    
    
        
        @Column(name="ISSN", nullable=false, length=50)
        public String getIssn() {
            return this.issn;
        }
        
        public void setIssn(String issn) {
            this.issn = issn;
        }
    
    
        
        @Column(name="CitedMedium", nullable=false, length=50)
        public String getCitedMedium() {
            return this.citedMedium;
        }
        
        public void setCitedMedium(String citedMedium) {
            this.citedMedium = citedMedium;
        }
    
    
        @Temporal(TemporalType.DATE)
        @Column(name="PubDate", nullable=false, length=10)
        public Date getPubDate() {
            return this.pubDate;
        }
        
        public void setPubDate(Date pubDate) {
            this.pubDate = pubDate;
        }
    
    
        
        @Column(name="Title", nullable=false, length=50)
        public String getTitle() {
            return this.title;
        }
        
        public void setTitle(String title) {
            this.title = title;
        }
    
    
        
        @Column(name="ArticleTitle", nullable=false, length=50)
        public String getArticleTitle() {
            return this.articleTitle;
        }
        
        public void setArticleTitle(String articleTitle) {
            this.articleTitle = articleTitle;
        }
    
    
        
        @Column(name="Abstract", nullable=false, length=65535)
        public String getAbstract_() {
            return this.abstract_;
        }
        
        public void setAbstract_(String abstract_) {
            this.abstract_ = abstract_;
        }
    
    
        
        @Column(name="Language", nullable=false, length=50)
        public String getLanguage() {
            return this.language;
        }
        
        public void setLanguage(String language) {
            this.language = language;
        }
    
    
        @Temporal(TemporalType.DATE)
        @Column(name="ArticleDate", nullable=false, length=10)
        public Date getArticleDate() {
            return this.articleDate;
        }
        
        public void setArticleDate(Date articleDate) {
            this.articleDate = articleDate;
        }
    
    
    @OneToMany(fetch=FetchType.LAZY, mappedBy="article")
        public Set getMedlinecitations() {
            return this.medlinecitations;
        }
        
        public void setMedlinecitations(Set medlinecitations) {
            this.medlinecitations = medlinecitations;
        }
    
    
    @ManyToMany(fetch=FetchType.LAZY)
        @JoinTable(name="articleauthor", catalog="pubmedarticleset", joinColumns = { 
            @JoinColumn(name="ArticleId", nullable=false, updatable=false) }, inverseJoinColumns = { 
            @JoinColumn(name="AuthorId", nullable=false, updatable=false) })
        public Set getAuthors() {
            return this.authors;
        }
        
        public void setAuthors(Set authors) {
            this.authors = authors;
        }
    
    
    
    
    
    
    
    
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Ti dà sempre errore quando salvi... dovresti anche dire che errore ti esce... magari postando lo stackTrace dell'eccezione, che è la cosa fondamentale per capire le cause e il punto in cui avviene l'errore.

    Ciao.
    Ultima modifica di LeleFT; 11-07-2018 a 10:10
    "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
    Sep 2016
    Messaggi
    17
    si hai perfettamente ragione

    questo è l'errore

    INFO: HHH000397: Using ASTQueryTranslatorFactory
    Hibernate: insert into pubmedarticleset.article (PubModel, ISSN, CitedMedium, PubDate, Title, ArticleTitle, Abstract, Language, ArticleDate) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into articleauthor (ArticleId, AuthorId) values (?, ?)
    errore object references an unsaved transient instance - save the transient instance before flushing: entity.Author

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Stai cercando di salvare un oggetto Article, che al suo interno contiene una collezione di altre entità (Author). Nel momento in cui vai a salvare l'Article, non sono presenti nel DB le entità (Author) referenziate (infatti sono nuove). Per far sì che Hibernate prenda in considerazione questa cosa e sia in grado di andare a salvare automaticamente anche le entità nuove referenziate, è necessario dirglielo. Come si fa? Gli si dice di aggiornare "in cascata" le tabelle collegate. Per far questo si usa il parametro cascade=CascadeType.ALL nell'annotazione della relazione ManyToMany (se usi le annotations) o l'attributo cascade="all" nel file XML del mapping (se usi il mapping XML).

    Vedendo il tuo codice stai usando le annotation e, infatti, nell'annotazione @ManyToMany non hai specificato il tipo di aggiornamento in cascata.

    @ManyToMany(cascade = CascadeType.ALL)

    Ciao.
    Ultima modifica di LeleFT; 13-07-2018 a 10:21
    "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 © 2024 vBulletin Solutions, Inc. All rights reserved.