私は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;
}
...ちょうど更新を作成するために、作成からhibernate.hbm2ddl.autoの設定を変更し、そして今は問題をtheresの。データベースはIDをカウントしているので、同じオブジェクトではありませんか? – Omer
1回目と2回目の実行の間に、 "Peter"を "Paul"に、 "Sophie"を "Sarah"に変更します。あなたは今より多くの物体を手に入れますか? – millhouse
いいえ、最初のオブジェクトがまだデータベースにあります.2度目の実行は記録されません。私はperson.classのコードを追加しました – Omer