0

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

}

ここにコード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;
    }
4

2 に答える 2

0

hibernate.hbm2ddl.auto の設定を create から create-update に変更したところ、問題はなくなりました...

于 2011-05-25T19:24:22.163 に答える
0

Personand Adress(sic) オブジェクトをどのように記述し、注釈を付けたかを示す必要があるかもしれません。

「正しい」実装 (つまり、オブジェクトの を見ない)equals()を記述した場合、保存するように要求したオブジェクトがデータベースに既に存在するため、2 回目の呼び出しは何もしません。hashcode()@Idsave()

于 2011-05-25T00:13:50.470 に答える