0

在工作中,我们有一个有趣的库,它建立在 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 项目中使用它们。

感谢您的任何建议。

4

1 回答 1

1

我知道 Seam 2 附带了类似的东西。它被称为Seam 应用程序框架。

但我不推荐使用它,因为它提供了额外的抽象,使其更难理解。

于 2012-07-05T14:22:18.777 回答