Hibernate关系映射
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-140.html 1、关系映射: A.一对一:主键关联:主键关联 单向:外键关联 双向:外键关联或中间表 联合主键: @OneToOne:一对一关联关系,注解在对方类引用的get方法上 @Join
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-140.html
1、关系映射:
A. 一对一:主键关联:主键关联
单向:外键关联
双向:外键关联或中间表
联合主键:
@OneToOne:一对一关联关系,注解在对方类引用的get方法上
@JoinColumn:设置关联的外键名,name属性
@PrimaryKeyJoinColumn:设置主键关联
@JoinColumns设置联合主键
xml使用
B. 一对多:一方添加多方的Set集合
注解:@OneToMany和@JoinColumn指定多方的外键名
Xml:
C. 多对一:在多方加外键
注解:@ManyToOne
Xml:
注:一对多、多对一的双向关系,交给多方维护关系,在@OneToMany设置mappedBy
属性,xml在
D. 多对多:
单向:
注解:在维护集合上@ManyToMany,@JoinTable指定中间表名和列名,
JoinColumns、JoinColumn、inverseJoinColumn
Xml:
双向:
注解:单向的基础上在另一边的集合设置@ManyToMany(mappedBy="")
Xml:另一边也设置
E. 组件映射:作为表的一部分的Bean,不作为实体,如学生证作为学生实体的一部分;
实体中的组件引用加@Embedded
Xml中用
注:(1)双向关联mappedBy属性必须设定,xml用
表示关系由对方主导;
(2)双向关系要很注意在调用过程中可能出现实体无限循环调用的堆栈溢出的危险;
2、关联关系下的增删改查:
(1) 关联关系设置cascade级联操作,只影响增删改;
(2) 若被关联对象为一方,默认直接取出来,EAGER;
(3) 若被关联对象为多方,默认是延迟加载,LAZY;
(4) fetch设置查询读取级联操作,只影响查询操作,默认LAZY;
(5) 双向的关联关系有些操作会导致重复操作,注意设置延迟加载避免多余操作;
(6) 删除:先查询再删除,防止级联删除--破坏掉内存实体的关联关系或HQL;
3、集合映射:
(1) 常规方式:Set;
(2) List:加注解和Set一样,List是为了能够排序,@OrderBy指定排序参数;
(3) Map:key为不可重复子段(多数为主键),@MapKey;value为集合元素实体,较适用于查询;
4、继承映射:
(1) 少数属性继承关系:Single-Table,一张表存储所有类,加一个类型标记位子段;
(2) 每个类各自一张表:Table-per-Class,没法存储继承多态关系,继承多态调用麻烦,需要维护每个实体主键的唯一性;
(3) 按照继承关系,父类有表,子类也有表,但是共同属性在父表中:Joined,父表和子表要设置主键关联,维护主键唯一性,查询必须连接表,新子类要建新表;
注解:A. @Inheritance:注明继承映射,指定继承映射策略,用于父类;
B. @DiscriminatorColumn:标明类的类型标记位,用于父类;
C. @DiscriminatorValue("标记位值"):类类型标记位值;
5、树状映射:
(1)对象设计:id、父亲节点引用、孩子节点集合、其他的节点内容;
(2)表设计:id、parent_id、其他节点内容列;
(3)设置@Entity、@Id、主键生成策略、@ManyToOne(设置外键列"parent_id")、@OneToMany(mappedBy="parent");
(4)设置修改级联,LAZY还是EAGER具体分析才选择;
(5)设置好对象间父子关系,存入数据库即可;
(6)查询使用递归方式查询;
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-140.html

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











SpringBoot プロジェクトへの Hibernate の統合 はじめに Hibernate は、Java オブジェクトをデータベース テーブルにマップして永続化操作を容易にする、人気のある ORM (オブジェクト リレーショナル マッピング) フレームワークです。 SpringBoot プロジェクトでは、Hibernate を統合すると、データベース操作をより簡単に実行できるようになります。この記事では、SpringBoot プロジェクトに Hibernate を統合する方法と、対応する例を示します。 1.依存関係の導入pom.xml ファイルに次の依存関係を導入します: org.springframework.bootspring-boot-starter-data-jpam

JPAとは何ですか? JDBC との違いは何ですか? JPA (JavaPersistence API) は、オブジェクト リレーショナル マッピング (ORM) の標準インターフェイスです。これにより、Java 開発者は、データベースに対して SQL クエリを直接記述することなく、使い慣れた Java オブジェクトを使用してデータベースを操作できるようになります。 JDBC (JavaDatabaseConnectivity) は、データベースに接続するための Java の標準 API であり、開発者は SQL ステートメントを使用してデータベースを操作する必要があります。 JPA は JDBC をカプセル化し、オブジェクト リレーショナル マッピングのためのより便利で高レベルの API を提供し、データ アクセス操作を簡素化します。 JPA ではエンティティとは何ですか?実在物

Java は、ソフトウェア開発の分野で広く使用されているオブジェクト指向プログラミング言語です。 Hibernate は、Java オブジェクトの永続性を管理するためのシンプルかつ効率的な方法を提供する、人気のある Java 永続性フレームワークです。ただし、開発プロセス中に Hibernate エラーが発生することが多く、これらのエラーによりプログラムが異常終了したり、不安定になったりする可能性があります。 Hibernate エラーを処理および回避する方法は、Java 開発者が習得しなければならないスキルとなっています。この記事では一般的な Hib を紹介します。

ASUSのゲーミングノートPCというとRepublic of Gamersが真っ先に思い浮かびますが、Republic of GamersのハイエンドゲーミングノートPCに加えて、ASUSにはFlying FortressシリーズのメインストリームゲーミングノートPCもあります。ゲーマーの間で最も人気のあるASUS Flying Fortress 7はいかがでしょうか。 ASUS フライング フォートレス 7 ASUS のフライング フォートレス シリーズ ノートブックは、大規模なゲームを簡単にプレイできるように設計されており、頑丈さと耐久性に重点が置かれており、ゲーマーや学生の間で常に人気があります。基本構成 まず、このFlying Fortress 7のコア構成のいくつかを見てみましょう。構成表で最も注目すべきはAMD Ryzen73750H+NVIDIA GeForceGTX1660Tiです。

Android システムと Linux カーネルは 2 つの密接な関係にあるエンティティであり、両者の関係は密接かつ複雑です。 Android システムでは、Linux カーネルが重要な役割を果たし、Android システムに基盤となるハードウェア ドライバーとシステム コールのサポートを提供します。この記事では、Android システムと Linux カーネルの関係、それらがどのように相互作用して連携するかを検討し、いくつかの具体的なコード例を示します。 Android は、Linux カーネルに基づいて開発されたモバイル オペレーティング システムで、主にスマートフォンやタブレットなどのモバイル デバイスに使用されます。 L

Huawei Honmeng システムと Android の関係に関する研究 技術の継続的な発展により、スマートフォンは人々の生活に欠かせないものになりました。世界有数の携帯電話メーカーの 1 つとして、ファーウェイは常に革新を続け、より優れたモバイル オペレーティング システムとユーザー エクスペリエンスを提供することに尽力しています。近年、米国によるファーウェイ弾圧を受けてファーウェイは独自OSの開発を加速し始め、HarmonyOSが誕生した。このような背景から、Hongmeng System と Android の関係に人々が注目し始めています。まず、理解する必要があります

Hibernate と mybatis の違い: 1. 実装方法、2. パフォーマンス、3. オブジェクト管理の比較、4. キャッシュのメカニズム。詳細な紹介: 1. 実装方法、Hibernate はオブジェクトをデータベース テーブルにマップする完全なオブジェクト/リレーショナル マッピング ソリューションですが、MyBatis では開発者が SQL ステートメントと ResultMap を手動で記述する必要があります; 2. パフォーマンス、開発速度の点で Hibernate は可能です。 MyBatis は、Hibernate が DAO 層などを簡素化するためです。

Hibernate の 1 対多および多対多 Hibernate は、Java アプリケーションとリレーショナル データベース間のデータ アクセスを簡素化する優れた ORM フレームワークです。 Hibernate では、1 対多および多対多の関係を使用して、複雑なデータ モデルを処理できます。 Hibernate の 1 対多 Hibernate では、1 対多の関係は、1 つのエンティティ クラスが他の複数のエンティティ クラスに対応することを意味します。たとえば、1 つの注文は複数の注文アイテム (OrderItem) に対応することができ、1 人のユーザー (User) は複数の注文 (Order) に対応することができます。 Hibernate で 1 対多の関係を実装するには、エンティティ クラスでコレクション属性を定義して格納する必要があります。
