保存带有Hibernate注释的对象?

问题描述

| 我只是想问一问,用Hibernate注释创建数据库后如何创建对象? 当我运行下面的代码时,它将使用对象创建数据库,但是当我第二次运行时,它将创建完全相同的对象,并且没有添加任何新对象?怎么来的?在创建带有注释的数据库之后,如何使用方法为.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;
    }
    

解决方法

您可能需要向我们展示如何编写和注释
Person
Adress
(原文如此)对象。 如果您已经编写了“正确”的
equals()
hashcode()
实现(即,不看对象的
@Id
),那么您的
save()
调用第二次将无济于事,因为您已要求对象保存已经存在于数据库中。     ,刚刚将hibernate.hbm2ddl.auto的设置从create更改为create-update,现在没有问题...