0

我是休眠的新手。我看过一些教程,但我找不到这个问题:

  • 如何在一个表中添加一个新行,该表与另一个已经存在的依赖项有一个依赖关系?

休眠.cfg.xml

>     <?xml version='1.0' encoding='utf-8'?>
>     <!DOCTYPE hibernate-configuration PUBLIC
>          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
>         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
>     
>     <hibernate-configuration>
>       <session-factory>
>           <!-- Paramètres de connexion à la base de données -->
>           <!-- <property name="connection.driver_class">com.mysql.jdbc.Driver</property> -->
>           <!-- <property name="connection.url">jdbc:mysql://localhost:3306/bh</property> -->
>           <!-- <property name="connection.username">root</property> -->
>           <!-- <property name="connection.password"></property> -->
>           <!-- <property name="dialect">org.hibernate.dialect.MySQLDialect</property> -->
>     
>           <property name="connection.driver_class">org.postgresql.Driver</property>
>           <property name="connection.url">jdbc:postgresql://localhost:5432/projetForum</property>
>           <property name="connection.username">postgres</property>
>           <property name="connection.password">esct</property>
>           <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
>     
>           <!-- Comportement pour la conservation des tables -->
>           <property name="hbm2ddl.auto">update</property>
>     
>           <!-- Activation : affichage en console, commentées et formatées -->
>           <property name="show_sql">true</property>
>           <property name="hibernate.format_sql">true</property>
>           <property name="use_sql_comments">true</property>
>     
>           <!-- Fichiers à mapper -->
>           <mapping class="com.forum.beans.Utilisateur" />
>           <mapping class="com.forum.beans.Topic" />
>           <mapping class="com.forum.beans.Post" />
>           
>       </session-factory>
>     </hibernate-configuration>

我的豆类课程

package com.forum.beans;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlTransient;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Entity
@Table(name = "utilisateur")
public class Utilisateur {

  @Id
  @Column(name = "utilisateur_email")
  private String email;
  @Column(name = "utilisateur_mdp")
  private String motDePasse;
  @Column(name = "utilisateur_nom")
  private String nom;
  @Column(name = "utilisateur_avatar")
  private String avatar;
  @Column(name = "utilisateur_localisation")
  private String localisation;
  @Column(name = "utilisateur_siteweb")
  private String siteweb;
  @Column(name = "utilisateur_dateInscrit")
  private String dateInscrit;
  @Column(name = "utilisateur_dateDernVisite")
  private String dateDernVisite;
  @Column(name = "utilisateur_description")
  private String description;
  @Column(name = "utilisateur_dateNaiss")
  private String dateDeNaissance;

  @OneToMany(mappedBy = "tcreateur")
  @LazyCollection(LazyCollectionOption.FALSE)
  private List<Topic> topicList;

  @OneToMany(mappedBy = "pcreateur")
  @LazyCollection(LazyCollectionOption.FALSE)
  private List<Post> postList;

  public Utilisateur(String email, String motDePasse, String nom,
          String localisation, String siteweb, String description) {
      this.email = email;
      this.motDePasse = motDePasse;
      this.nom = nom;
      this.topicList = null;
      this.postList = null;
      this.siteweb = siteweb;
      this.description = description;
      this.localisation = localisation;

      SimpleDateFormat formater = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
      Date aujourdhui = new Date();
      this.dateDernVisite = formater.format(aujourdhui);
  }

  public Utilisateur() {
  }

  public String getDateDernVisite() {
      return dateDernVisite;
  }

  public void setDateDernVisite(String dateDernVisite) {
      this.dateDernVisite = dateDernVisite;
  }

  public String getDateDeNaissance() {
      return dateDeNaissance;
  }

  public void setDateDeNaissance(String dateDeNaissance) {
      this.dateDeNaissance = dateDeNaissance;
  }

  public String getDescription() {
      return description;
  }

  public void setDescription(String description) {
      this.description = description;
  }

  public String getAvatar() {
      return avatar;
  }

  public void setAvatar(String avatar) {
      this.avatar = avatar;
  }

  public String getLocalisation() {
      return localisation;
  }

  public void setLocalisation(String localisation) {
      this.localisation = localisation;
  }

  public String getSiteweb() {
      return siteweb;
  }

  public void setSiteweb(String siteweb) {
      this.siteweb = siteweb;
  }

  public String getDateInscrit() {
      return dateInscrit;
  }

  public void setDateInscrit(String dateInscrit) {
      this.dateInscrit = dateInscrit;
  }

  public String getdateDernVisite() {
      return dateDernVisite;
  }

  public void setdateDernVisite(String dateDernVisite) {
      this.dateDernVisite = dateDernVisite;
  }

  @XmlTransient
  public List<Post> getPostList() {
      return postList;
  }

  public void setPostList(List<Post> postList) {
      this.postList = postList;
  }

  @XmlTransient
  public List<Topic> getTopicList() {
      return topicList;
  }

  public void setTopicList(List<Topic> topicList) {
      this.topicList = topicList;
  }

  public void setEmail(String email) {
      this.email = email;
  }

  public String getEmail() {
      return email;
  }

  public void setMotDePasse(String motDePasse) {
      this.motDePasse = motDePasse;
  }

  public String getMotDePasse() {
      return motDePasse;
  }

  public void setNom(String nom) {
      this.nom = nom;
  }

  public String getNom() {
      return nom;
  }
}

我要添加的课程:

>      package com.forum.beans;
>     
>     import java.text.SimpleDateFormat;
>     import java.util.Date;
>     import java.util.List;
>     
>     import javax.persistence.CascadeType;
>     import javax.persistence.Column;
>     import javax.persistence.Entity;
>     import javax.persistence.GeneratedValue;
>     import javax.persistence.GenerationType;
>     import javax.persistence.Id;
>     import javax.persistence.JoinColumn;
>     import javax.persistence.ManyToOne;
>     import javax.persistence.OneToMany;
>     import javax.persistence.Table;
>     import javax.xml.bind.annotation.XmlTransient;
>     
>     import org.hibernate.annotations.LazyCollection;
>     import org.hibernate.annotations.LazyCollectionOption;
>     
>     @Entity
>     @Table(name = "topic")
>     public class Topic {
>     
>       @Id
>       @Column(name = "topic_id")
>       @GeneratedValue(strategy = GenerationType.AUTO)
>       private Integer id;
>       @Column(name = "topic_titre")
>       private String titre;
>       @Column(name = "topic_corps")
>       private String corps;
>       @Column(name = "topic_date")
>       private String date;
>     
>       @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
>       @JoinColumn(name = "topic_createur")
>       private Utilisateur tcreateur;
>     
>       @OneToMany(mappedBy = "ptopic")
>       @LazyCollection(LazyCollectionOption.FALSE)
>       private List<Post> tpostList;
>     
>       public Topic(String titre, String corps) {
>           this.titre = titre;
>           this.corps = corps;
>     
>           SimpleDateFormat formater = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
>           Date aujourdhui = new Date();
>           this.date = formater.format(aujourdhui);
>     
>       }
>     
>       public Topic() {
>       }
>     
>       @XmlTransient
>       public List<Post> getTpostList() {
>           return tpostList;
>       }
>     
>       public void setTpostList(List<Post> tpostList) {
>           this.tpostList = tpostList;
>       }
>     
>       @XmlTransient
>       public List<Post> getPostList_topic() {
>           return tpostList;
>       }
>     
>       public void setPostList_topic(List<Post> tpostList) {
>           this.tpostList = tpostList;
>       }
>     
>       public void setDate(String date) {
>           this.date = date;
>       }
>     
>       public void setTcreateur(Utilisateur tcreateur) {
>           this.tcreateur = tcreateur;
>       }
>     
>       public String getDate() {
>           return date;
>       }
>     
>       public void setDateDernModif(String date) {
>           this.date = date;
>       }
>     
>       public Utilisateur getTcreateur() {
>           return tcreateur;
>       }
>     
>       public void setEditeur(Utilisateur tcreateur) {
>           this.tcreateur = tcreateur;
>       }
>     
>       public Integer getId() {
>           return id;
>       }
>     
>       public void setId(Integer id) {
>           this.id = id;
>       }
>     
>       public String getTitre() {
>           return titre;
>       }
>     
>       public void setTitre(String titre) {
>           this.titre = titre;
>       }
>     
>       public String getCorps() {
>           return corps;
>       }
>     
>       public void setCorps(String corps) {
>           this.corps = corps;
>       }
>     }

我的主要课程的一部分:

>     Utilisateur utilisateur = (Utilisateur) session
>                   .getAttribute("utilisateur");
>     
>           TopicDAO<com.forum.beans.Topic, Integer> ts = new TopicDAO<com.forum.beans.Topic, Integer>();
>           TopicForm form = new TopicForm();
>           com.forum.beans.Topic t = form.creerSujet(request);
>           List<com.forum.beans.Topic> tl =utilisateur.getTopicList();
>     
>           try {
>               if (utilisateur.getTopicList() == null)
>                   tl = (List<com.forum.beans.Topic>) new ArrayList<com.forum.beans.Topic>();
>               else
>                   tl = utilisateur.getTopicList();
>           } catch (Exception e) {
>               System.out.println(e);
>           }
>     
>               tl.add(t);
>               t.setTcreateur(utilisateur);
>               utilisateur.setTopicList(tl);
>               ts.create(t);

所以,我的问题是我让我的Topic 类成为一个持久类,但是我得到一个 JDBC 异常,说Utilisateur 类已经存在于我的数据库中

完整的堆栈跟踪

22:44:48,476 WARN JDBCExceptionReporter:100 - SQL 错误:0,SQLState:23505 22:44:48,477 错误 JDBCExceptionReporter:101 - L'élément du batch 0 /* insert com.forum.beans.Utilisateur */ insert into utilisateur ( utilisateur_avatar, utilisateur_dateNaiss, utilisateur_dateDernVisite, utilisateur_dateInscrit, utilisateur_description, utilisateur_localisation, utilisateur_mdp, utilisateur_nom, utilisateur_siteweb, utilisateur_email) 值 (NULL, NULL, '16-08-2013 10:40'2:42' 10:40 2013 10:44':42' 10:44':42', ',NULL,NULL,'mee','testerMan',NULL,'me@mail.com')一个été annulé。Appeler getNextException 倾倒在 connaître la 原因。22:44:48,477 WARN JDBCExceptionReporter:100 - SQL 错误:0,SQLState: 23505 22:44:48,478 错误 JDBCExceptionReporter:101 - ERREUR: la valeur d' une clé dupliquée rompt la contrainte unique « utilisateur_pkey » 详细信息: La clé « (utilisateur_email)=(me@mail.com) » 似曾相识。22:44:48,482 错误 AbstractFlushingEventListener:324 - 无法将数据库状态与会话 org.hibernate.exception.ConstraintViolationException 同步:无法在 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94) 处执行 JDBC 批量更新.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) 在 org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114) 在org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:109) run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.BatchUpdateException: L'élément du batch 0 /* insert com.forum.beans.Utilisateur */ insert into utilisateur (utilisateur_avatar, utilisateur_dateNaiss, utilisateur_dateDernVisite, utilisateur_dateInscrit, utilisateur_description, utilisateur_localisation, utilisateur_mdp, utilisateur_nom, utilisateur_siteweb, utilisateur_email) 值 (NULL, NULL, '16-08-2013 10:44:42', '16-08-04', '16-08-04'2: NULL,NULL,'mee','testerMan',NULL,'me@mail.com')一个été annulé。Appeler getNextException 倾倒在 connaître la 原因。在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.

4

1 回答 1

0

在您的主类代码中,当您获取列表时,我无论如何都会看到一个潜在的 NullPointer,因为它默认为空。您将必须创建一个新列表并分配给它。

com.forum.beans.Topic t = form.creerSujet(request);
List<com.forum.beans.Topic> tl =new ArrayList<com.forum.beans.Topic>();
tl.add(t);
utilisateur.setTopicList(tl);
t.setTcreateur(utilisateur);
ts.create(t);

请发布完整的异常堆栈跟踪。

于 2013-08-16T21:34:24.683 回答