在工作中,我们有一个有趣的库,它建立在 Hibernate 之上。它是一个通用 DAO 的实现,但完全充满了未来。例如,以下是其中之一:
我们的模型中的所有内容都是延迟加载的,但是当我们想要从数据库中检索一些关系时,我们通常会创建一个我们想要检索的类型的模板对象,然后设置我们需要获取的关系。因此,例如让我们假设以下对象。
@SuppressWarnings("serial")
@Entity
@Table(name="MYTABLE")
public class Type extends BaseAudit<TypeID>{
/**
* Este campo representa el codigo de autorizacion padre
*
*/
@Column(name="CODIGOTIPOAUTORIZACIONPADRE")
private Long codigonPadre ;
/**
* Este campo representa el nombre del tipo de autorizacion
*
*/
@Column(name="NOMBRETIPOAUTORIZACION")
private String nombreTipoAutorizacion ;
/**
*
*
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "CODIGOSISTEMA", referencedColumnName = "SYSID", insertable = false, updatable = false),
@JoinColumn(name = "CODIGOCOMPANIA", referencedColumnName = "COMID", insertable = false, updatable = false)
})
private CompanySystemDto companiaSistemaDTO;
/**
*
*
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "CODIGOCOMPANIA", referencedColumnName = "CODIGOCOMPANIA", insertable = false, updatable = false),
@JoinColumn(name = "CODIGOSISTEMA", referencedColumnName = "CODIGOSISTEMA", insertable = false, updatable = false),
@JoinColumn(name = "CODIGOTIPOAUTORIZACIONPADRE", referencedColumnName = "CODIGOTIPOAUTORIZACION", insertable = false, updatable = false),
})
private TipoAutorizacionDTO tipoAutorizacionPadreDTO;
@OneToMany(mappedBy="tipoAutorizacionPadreDTO")
private Collection<TipoAutorizacionDTO> listaAutorizaciones;
//..... Getters and Setters
如果我们需要获取它拥有的任何关系,我们将执行以下操作:
Type myType = new Type();
myType.setTipoAutorizacionPadreDTO(new TipoAutorizacionPadreDTO()).
简而言之..库所做的是搜索模板中不为空的任何关系对象,并根据某些条件从数据库中检索它们。标准可以是我们想要的任何东西。因此,假设我们想要 codigonPadre 为 1 的所有 Type 对象,模板应该是:
Type myType = new Type();
myType.setCodigonPadre(1L);
myType.setTipoAutorizacionPadreDTO(new TipoAutorizacionPadreDTO()).
//Code for searching in the database
上述模板的作用是:查找 codigonPadre 属性为 1 的所有 Type 实例,并获取该实例的 tipoAutorizacionPadreDTO 关系。
我发现这个“对象模板”系统非常有用,比 JPQL 或任何其他 JPA 机制更有用。我知道 JPA 2 规范现在有 Criteria API,我们可以在其中完成一些非常相似的东西。但问题是......是否有任何库可以管理这种风格并准备好使用?
显然,我正在谈论的库具有更多功能......例如,它们具有所谓的 CriteriaRestrictions,我们在其中指定模板对象中的属性名称和我们想要的限制。例子:
Type myType = new Type();
myType.setCodigonPadre(1L);
myType.setTipoAutorizacionPadreDTO(new TipoAutorizacionPadreDTO())
myType.setNombreTipoAutorizacion("likeValue");
myType.addCriteriaRestriction("nombreTipoAutorizacion",RestrictionType.INSENSITIVE_LIKE);
这将获取 codigonPadre 具有 1L 且 nombreTipoAutorizacion 在其值中具有 likeValue 的所有对象。
该库为我节省了数小时的编码时间,特别是在获取和搜索对象时,而无需创建服务方法来执行特定活动。这就是为什么我想在互联网上找到类似的东西,以便我可以在未来的 JEE 项目中使用它们。
感谢您的任何建议。