hibernateテーブルとテーブルの関係
5492 ワード
1、テーブルとテーブルの関係一対一(デフォルトのプライマリ・キー関連) は、まずエンティティにエンティティとエンティティとの関係を記述し、次にマッピングファイルにおいて2つのエンティティ間の関係 を記述する. nameは、エンティティ内の別のエンティティの属性名 を表す. class:別のクラスを表すフルパス名 一対一(外部キー関連)注意:特殊な多対一と見なす まず、エンティティとエンティティの関係をエンティティに記述する1枚のテーブルは、1対1の関係 を正確に記述するために、1対1の関係を正確に記述するために、外部キーが制約されている側(すなわち、外部キーが追加されている側)で一意の外部キー制約を使用する.別のテーブルは、依存外部キーを表す関係 を制約するために使用される.
外部キー制約のある方一対の複数は、まず、エンティティ内でエンティティとエンティティとの関係を記述する、次に、マッピングファイル内で2つのエンティティ間の関係を記述する .複数対1は、まずエンティティにエンティティとエンティティの関係を記述し、次にマッピングファイルに2つのエンティティの関係を記述する .
2、操作属性:カスケード操作cascade:テーブルとテーブルの間の削除変更操作を維持し、属性値:none(デフォルト)、save-update、delete、all、merge 関係メンテナンスinverse:テーブルとテーブルの関係のメンテナンスを担当し、デフォルトはfalseで、双方のメンテナンステーブルの関係を代表し、true:テーブルのメンテナンスを放棄することを代表する(一対多中)一方だけが放棄する権利があり、多角的にメンテナンスしなければならないため、この属性がない 3、遅延ロードlazy属性のデフォルト値はtrue(遅延ロード)
クラスレベル:classラベルに属性lazyデフォルトtrueを追加してloadメソッドにjavaコードを取得するときget(すべて即時ロード)load(lazy属性trueに従ってfalseのロードを遅延)関連レベル:ペア多: 一方はsetラベルにlazy属性デフォルトtrueを追加し、extraは極めて怠惰である 多方面はmany-to-oneラベルに属性lazyデフォルトfalseを追加し、proxy怠惰ロードno-proxy無代理怠惰ロード
4、hql接続クエリー
(注:ここでの内部接続は標準的な内部接続です:inner join、連表クエリー時に2つのテーブルのクラスを同時に使用することはできません.このクラスの属性で点を出さなければなりません)内接続:オブジェクト配列の切迫内接続を返します:カプセル化オブジェクト外接続を返します:オブジェクト配列の切迫外接続を返します:カプセル化オブジェクトを返します
注釈によるクラスとテーブルの関係の説明
@Entity注記クラスをエンティティBean@Tableに対応するデータベースのテーブルとして宣言
@Idプライマリ・キー@GeneratedValueプライマリ・キー生成ポリシーGenerationType.IDENTITY自動成長@Column(name="id")データベース・テーブルに対応するフィールドを設定エンティティ・クラスの属性名と同じであれば、内部のname属性を設定する必要はありません
@GenericGeneratorプライマリ・キー生成ポリシーのカスタマイズ
<
one-to-one >
外部キー制約のある方
2、操作属性:
private static void save() {
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
//
Street street = new Street();
street.setName(" 1");
//
District district = new District();
district.setName(" 1");
// set
HashSet set = new HashSet();
set.add(street);
//
district.setStreets(set);
//
session.save(district);
transaction.commit();
session.close();
}
クラスレベル:classラベルに属性lazyデフォルトtrueを追加してloadメソッドにjavaコードを取得するときget(すべて即時ロード)load(lazy属性trueに従ってfalseのロードを遅延)関連レベル:
4、hql接続クエリー
(注:ここでの内部接続は標準的な内部接続です:inner join、連表クエリー時に2つのテーブルのクラスを同時に使用することはできません.このクラスの属性で点を出さなければなりません)内接続:オブジェクト配列の切迫内接続を返します:カプセル化オブジェクト外接続を返します:オブジェクト配列の切迫外接続を返します:カプセル化オブジェクトを返します
Session session = HibernateUtil.getSession();
//
String hql="from District d inner join d.streets";
//
String hql1="from District d inner join fetch d.streets";
// -------
String hql2="select s.name,d.name from Street s,District d where s.district.id=d.id";
// -------
String hql3="select new com.hemi.bean.Address(d.name,s.name) from Street s,District d where s.district.id=d.id";
Query query = session.createQuery(hql1);
// List list = query.list();
// for (Address address : list) {
// System.out.println(address);
// }
// List
注釈によるクラスとテーブルの関係の説明
@Entity注記クラスをエンティティBean@Tableに対応するデータベースのテーブルとして宣言
@Idプライマリ・キー@GeneratedValueプライマリ・キー生成ポリシーGenerationType.IDENTITY自動成長@Column(name="id")データベース・テーブルに対応するフィールドを設定エンティティ・クラスの属性名と同じであれば、内部のname属性を設定する必要はありません
@Entity
@Table(name="student")
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column
private int id;
@Column
private String name;
@Column
private int age;
@GenericGeneratorプライマリ・キー生成ポリシーのカスタマイズ
@Entity
@Table(name="animals")
public class Animal {
@Id
@GenericGenerator(name="uu",strategy="uuid") @GeneratedValue(generator="uu")
@Column
private String id;
@Column
private String name;