我一直在做一个现在处于生产模式的项目。现在我被告知要从.hbm.xml
文件中完全删除映射,以便我需要在程序代码中手动处理每个关系。这确实是一个大问题,因为我编写的每个数据库操作都是在休眠标准中。
只需考虑以下标准
Criteria criteria = getSession().createCriteria(Table1.class,"table1");
criteria.createAlias("table1.table2", "table2")
.createAlias("table1.table3", "table3")
.createAlias("table3.table4", "table4")
.createAlias("table3.table5", "table5")
.setProjection(Projections.projectionList()
.add(Projections.property("id"),"id")
.add(Projections.property("c1"),"c1")
.add(Projections.property("c2"),"c2")
.add(Projections.property("c3"),"c3")
.add(Projections.property("table2.c1"),"table2.c1")
.add(Projections.property("table2.c2"),"table2.c2")
.add(Projections.property("table3.c1"),"table3.c1")
.add(Projections.property("table5.c1"),"table3.table5.c1"))
.add(Restrictions.eq("table4.c1", Constants.STATUS_ENABLED))
.setResultTransformer(new AliasToBeanNestedResultTransformer(Table1.class));
return criteria.list();
这是当所有关系都存在于 .hbm.xml 文件中时编写的标准。现在您可以了解从 .hbm.xml 文件中删除映射时我将面临的问题。TBH,我必须通过删除标准并将其替换为 HQL 来重新设计整个 DAO 类。此外,我将无法使用 HQL 直接将结果作为对象获取。
是否可以只对条件进行小的更改(例如在条件本身中定义表之间的连接),以便即使在从.hbm.xml
文件中删除映射后,我也能获得相同的输出..?
是的,您可以在实体类中使用 Java 持久性注释,并且的工作方式与 .hbm.xml 类相同。
以这个为例
@Entity
public class Employee {
@SequenceGenerator(name="EMPLOYEE_SEQ", sequenceName="EMPLOYEE_SEQ", initialValue=1, allocationSize=1)
@Id @GeneratedValue(strategy=GenerationType.AUTO, generator="EMPLOYEE_SEQ")
private int id;
@Column(nullable = false, length = 50)
private String name;
@ManyToOne(targetEntity = Country.class, optional = true, fetch = FetchType.LAZY)
@JoinColumn(name = "loanID", updatable = false, insertable = false)
private Loan loan;
@Column(name = "loanID", updatable = true, insertable = true)
private Integer loanID;
public int getId() {
return id;
}
public void setCompanyID(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getLoanD() {
return loanID;
}
public void getLoanD(Integer loanID) {
this.loanID = loanID;
}
}
然后你就像以前一样使用标准。