Java JPA 库

标签 java hibernate jpa

在工作中,我们有一个有趣的库,它构建在 Hibernate 之上。它是通用 DAO 的实现,但完全充满了 future 。在示例中,以下是其中之一:

我们的模型中的所有内容都是延迟加载的,但是当我们想要从数据库中检索某些关系时,我们通常做的是创建一个我们想要检索的类型的模板对象,然后设置我们需要获取的关系。例如,让我们假设以下对象。

 @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 的所有对象。

该库节省了我数小时的编码时间,特别是在获取和搜索对象时,而不必创建服务方法来执行特定的 Activity 。这就是为什么我想在互联网上找到类似的东西,以便我可以在未来的 JEE 项目中使用它们。

感谢您的任何建议。

最佳答案

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

但我不建议使用它,因为它提供了额外的抽象并使其更难以理解。

关于Java JPA 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11346119/

相关文章:

hibernate - 当@Transactional 处于类级别时如何使用只读

java - 如何在 Hibernate 上实现 GenericDAO 类

java - 如何在 JPA 中设置默认 boolean 值

java - 如何在不使用 InheritableThreadLocal 的情况下为每个顶级进程/线程提供共享上下文?

java - 使用单词拆分字符串但将单词保留在每个数组索引中

java - Spring + Hibernate + Maven org.hibernate.MappingException : AnnotationConfiguration instance is required

java - 始终对 JPA @Id 使用原始对象包装器而不是原始类型?

hibernate - 删除的对象将通过级联重新保存(从关联中删除删除的对象)

java - 在 Java 中使用整数值对字符串列表进行排序

Java:当使用 Procrun 将应用程序注册为 Windows 服务时,使用 ProcessBuilder 运行批处理文件