2011-05-24 7 views
0

私はHibernateアノテーションを使ってデータベースを作成した後にオブジェクトを作成する方法を知りたいと思っていますか?オブジェクトをHibernateアノテーションで保存しますか?

私は以下のコードを実行するとオブジェクトを含むデータベースを作成しますが、2回目に実行すると全く同じものが作成され、新しいオブジェクトは追加されません。どうして?アノテーションを使用してデータベースを作成した後、メソッド.saveでアノテーションを使用してオブジェクトを作成するにはどうすればよいですか?または、注釈を使用してこれを行うことはできませんか?

ありがとうございます。

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(); 
    } 

} 

相続人はあなたが書かれたと注釈を付けてきたどのように私たちを表示する必要があるかもしれません

@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; 
    } 

答えて

0

person.classコードあなたPersonAdress(s ic)オブジェクト。

あなたが「正しい」equals()hashcode()実装を書いている場合(つまり、オブジェクトの@Idを見ていないこと)オブジェクトを使用すると、保存するように求めてきましたので、あなたのsave()呼び出しが何に周りに二時間もしないだろうすでにデータベースに存在しています。

+0

...ちょうど更新を作成するために、作成からhibernate.hbm2ddl.autoの設定を変更し、そして今は問題をtheresの。データベースはIDをカウントしているので、同じオブジェクトではありませんか? – Omer

+0

1回目と2回目の実行の間に、 "Peter"を "Paul"に、 "Sophie"を "Sarah"に変更します。あなたは今より多くの物体を手に入れますか? – millhouse

+0

いいえ、最初のオブジェクトがまだデータベースにあります.2度目の実行は記録されません。私はperson.classのコードを追加しました – Omer

0

は私が@GeneratedValueを使用しています...それを得るいけないので、それが問題になるはずの

関連する問題