Hibernate の簡単な例を作成しようとしています。ユーザーとメモの 2 つのエンティティがあります。1 対多の関係があります (1 人のユーザーが多数のメモを持つことができます)。注釈を使用してデータベースにこれらの関係を正しく表示するのを手伝ってください。しかし、関係を実装するために 3 番目のテーブルを作成したくありません。必要なテーブルは 2 つだけです。
ここに私のクラスがあります:
ユーザー.java :
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy="user") //Is it right value for mappedBy-parameter?
private List<Note> notes = new ArrayList<Note>();
// getters and setters
注.java :
@Entity
@Table(name = "note")
public class Note {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "content")
private String content;
@ManyToOne
private User user;
// getters and setters
Main.java :
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
List<Note> notes = new ArrayList<Note>();
Note note1 = new Note();
note1.setContent("my first note");
Note note2 = new Note();
note2.setContent("my second note");
notes.add(note1);
notes.add(note2);
User user = new User();
user.setName("Andrei");
user.setNotes(notes);
session.save(user);
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
hibernate.cfg.xml :
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create-drop</property>
<mapping class="com.vaannila.blog.User" />
<mapping class="com.vaannila.blog.Note" />
私のデータベースでこのコードを実行した後、Hibernate は 2 つのテーブルを作成して埋めました。
しかし、問題が発生しました。メモテーブルのフィールドuser_id値が null ですが、ユーザー ID (この場合は 1) と等しくなければなりません。
この問題とこの例を正しく機能させるには、注釈に何を追加する必要がありますか? ただし、追加のテーブルを作成する必要はありません。
私は本当に助けていただければ幸いです!