我想我在实现 Hibernate ORM 时完全搞糊涂了。
我的理解是 Hibernate 可以让你消除 DAO 层。并不是说它是强制性的(甚至是有利的),但它确实让你这样做。
但是,就我而言,我不明白这是怎么发生的。我将使用我系统的两个实体——公司和公司注册来解释我的案例。
公司类别 -
@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..
}
公司注册类 -
@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 集合的需求。
但是,我仍然必须使用 DAO 层来持久化 Company 对象,不是吗?我知道我可以在该层中使用 HQL 而不是标准 SQL,但这不是我关心的问题。还有一个单独的层。
我很可能误解了这里的概念。
所以,我的问题是事情是这样运作的吗?此外,除了缓存(对我来说是一个很大的优势)、自动持久化集合(但不是所有者对象)和 HQL(由于我还没有使用过,因此无法对此发表评论)之外,Hibernate 提供了哪些优势?