2011-05-24 3 views
0

Je veux juste savoir comment il est possible de créer un objet après avoir créé votre base de données avec les annotations Hibernate?Enregistrer l'objet avec les annotations Hibernate?

Lorsque j'exécute le code ci-dessous, il crée la base de données avec les objets, mais quand je cours la deuxième fois, il crée exactement la même chose, et aucun nouvel objet n'est ajouté? Comment venir? Comment puis-je créer des objets en utilisant des annotations avec la méthode .save, après avoir créé la base de données avec des annotations? Ou n'est-il pas possible de le faire avec des annotations?

Merci d'avance.

public static void main(String[] args) { 

    Session session = HibernateUtil.getSessionFactory().openSession(); 
    Transaction transaction = null; 
    try { 
     transaction = session.beginTransaction(); 

     Adress adress = new Adress("Streetname", "postcode"); 

     Person person1 = new Person("Peter Hanks", adress); 
     Person person2 = new Person("Sophie Hanks", adress); 

     session.save(person1); 
     session.save(person2); 
     transaction.commit(); 



    } catch (HibernateException e) { 
     transaction.rollback(); 
     e.printStackTrace(); 
    } finally { 
     session.close(); 
    } 

} 

Heres le code person.class

@Entity 
@Table(name="person") 
public class Person implements Serializable { 
private long id; 
private String navn; 
private Adresse adresse; 

public Person() { 
} 

public Person(String navn, Adresse adresse) { 
    this.navn = navn; 
    this.adresse = adresse; 
} 

@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name= "adresse_id", nullable = false) 
public Adresse getAdresse() { 
    return adresse; 
} 

public void setAdresse(Adresse adresse) { 
    this.adresse = adresse; 
} 

@Id 
@GeneratedValue 
@Column(name= "id") 
public long getId() { 
    return id; 
} 

public void setId(long id) { 
    this.id = id; 
} 

@Column(name = "navn", nullable= false, length= 100) 
public String getNavn() { 
    return navn; 
} 

public void setNavn(String navn) { 
    this.navn = navn; 
} 


@Override 
public int hashCode() { 
    int hash = 3; 
    hash = 29 * hash + (this.navn != null ? this.navn.hashCode() : 0); 
    hash = 29 * hash + (this.adresse != null ? this.adresse.hashCode() : 0); 
    return hash; 
} 





@Override 
    public boolean equals(Object obj) { 
     if (obj == null) { 
      return false; 
     } 
     if (getClass() != obj.getClass()) { 
      return false; 
     } 
     final Person other = (Person) obj; 
     if ((this.navn == null) ? (other.navn != null) : !this.navn.equals(other.navn)) { 
      return false; 
     } 
     if (this.adresse != other.adresse && (this.adresse == null || !this.adresse.equals(other.adresse))) { 
      return false; 
     } 
     return true; 
    } 

Répondre

0

Vous pourriez avoir besoin de nous montrer comment vous avez écrit et annotés votre Person et Adress (s ic) objets.

Si vous avez écrit « correct » equals() et hashcode() mises en œuvre (c.-à-qui ne regarde pas le @Id de l'objet), alors vos save() appels ne rien faire la deuxième fois parce que les objets que vous avez demandé d'enregistrer existe déjà dans la base de données.

+0

Je ne l'obtenir .. J'utilise @GeneratedValue, donc il ne devrait pas être un problème . La base de données compte l'ID, donc il ne peut pas être les mêmes objets ?? – Omer

+0

Entre la première et la deuxième fois, remplacez "Peter" par "Paul" et "Sophie" par "Sarah". Avez-vous plus d'objets maintenant? – millhouse

+0

non, en cours d'exécution deuxième fois les premiers objets se trouve toujours dans la base de données .. les secondes ajoutées ne sont pas enregistrées ??? Je viens d'ajouter le code pour person.class – Omer

0

vient de changer les paramètres de hibernate.hbm2ddl.auto de créer pour créer de mise à jour, et il y a maintenant aucun problème ...

Questions connexes