Hibernate ORM の実装で完全に混乱したと思います。
私の理解では、Hibernate を使用すると DAO レイヤーを削除できます。必須である(または有利でさえある)わけではありませんが、そうすることができます。
しかし、私の場合、これがどのように起こるかわかりません。私のシステムの 2 つのエンティティである Company と CompanyRegistration を使用して、私のケースを説明します。
カンパニークラス -
@Entity
@Table(name = "Company")
public class Company extends LightEntity implements BaseSerializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id")
private int id;
@Column(name = "Code")
private String code;
@Column(name = "Name")
private String name;
@Column(name = "Address")
private String address;
@Column(name = "ContactNumber1")
private String contactNumber1;
@Column(name = "ContactNumber2")
private String contactNumber2;
@Column(name = "EMail")
private String email;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "company", cascade = CascadeType.ALL)
private List<CompanyRegistration> companyRegistrations;
public Company(String code, String name) {
this.code = code;
this.name = name;
}
// getters and setters follow..
}
CompanyRegistration クラス -
@Entity
@Table(name = "CompanyRegistration")
public class CompanyRegistration extends LightEntity implements BaseSerializable {
@Id
@Column(name = "RegistrationNumber")
private String registrationNumber;
@Column(name = "YearOfRegistration")
private String yearOfRegistration;
@ManyToOne
@JoinColumn(name = "CompanyId", nullable = false)
private Company company;
public CompanyRegistration(String registrationNumber, String yearOfRegistration, Company company) {
this.registrationNumber = registrationNumber;
this.yearOfRegistration = yearOfRegistration;
this.company = company;
}
public String getRegistrationNumber() {
return registrationNumber;
}
public String getYearOfRegistration() {
return yearOfRegistration;
}
public String getCompanyId() {
return company.Id;
}
}
Company クラスではCascadeType.All
、Hibernate が保存、更新、削除などのカスケード操作を処理し、それらをデータベースに永続化するように指定しました。したがって、CompanyRegistration コレクションの変更は、そのデータベース テーブルに直接反映されます。したがって、Hibernate は、CompanyRegistration コレクションを永続化するという私のニーズに応えます。
ただし、Company オブジェクトを永続化するには、DAO レイヤーを使用する必要がありますね。標準 SQL の代わりにそのレイヤーで HQL を使用できることは理解していますが、それは私の関心事ではありません。別のレイヤーがまだあります。
ここでの概念を誤解している可能性が最も高いです。
それで、私の質問はこれが物事の仕組みですか?また、キャッシング (ここで私にとって大きなプラス)、自動永続化コレクション (所有者オブジェクトではありません)、HQL (まだ使用していないためコメントできません) 以外に、Hibernate が提供する利点は何ですか?